zincjs 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -1
- package/build/zinc.frontend.js +1 -1
- package/build/zinc.js +55 -11
- package/build/zinc.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/mapMarker.svg +1 -1
- package/src/primitives/marker.js +3 -2
- package/src/primitives/textureSlides.js +126 -46
- package/src/primitives/zincObject.js +41 -2
- package/src/region.js +6 -10
- package/src/scene.js +1 -2
- package/src/shaders/textureSlide.js +6 -4
package/build/zinc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/webpack/bootstrap","webpack://Zinc/./src/zinc.js","webpack://Zinc/external \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external \"three\"","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/external \"three-spritetext\"","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loaders/JSONLoader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/texture/textureArray.js","webpack://Zinc/./src/texture/texture.js","webpack://Zinc/./src/primitives/textureSlides.js","webpack://Zinc/./src/shaders/textureSlide.js","webpack://Zinc/./src/primitives/texturePrimitive.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/./src/loaders/STLLoader.js","webpack://Zinc/./src/loaders/OBJLoader.js","webpack://Zinc/./src/loaders/primitivesLoader.js","webpack://Zinc/./src/loaders/GLTFToZincJSLoader.js","webpack://Zinc/external \"three/examples/jsm/loaders/GLTFLoader\"","webpack://Zinc/./src/sceneExporter.js","webpack://Zinc/./src/three/GLTFExporter.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/region.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external \"webworkify-webpack\"","webpack://Zinc/external \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js"],"names":["require","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Lines","TextureArray","TextureSlides","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","ZincObject","call","videoHandler","isGeometry","createMesh","geometryIn","materialIn","options","geometry","morph","toBufferGeometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","localMorphColour","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","mesh","Mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","setWireframe","wireframe","prototype","Object","create","THREEGeometry","uniqueiId","getUniqueId","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","closestVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","region","animationClip","uuid","setDuration","durationIn","getDuration","setRegion","getRegion","morphNormalsReady","computeMorphNormals","toIndexedBufferGeometry","copyMorphColorsToIndexedBufferGeometry","clone","colorsNeedUpdate","computeBoundingSphere","checkAndCreateTransparentMesh","secondaryMaterial","FrontSide","renderOrder","name","BackSide","needsUpdate","add","checkAndRemoveTransparentMesh","remove","uncache","AnimationObjectGroup","AnimationMixer","morphAttribute","position","normal","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","matrixAutoUpdate","setFrustumCulled","setAttribute","getAttribute","setName","groupNameIn","getCurrentTime","ratio","time","_clip","updateMorphColorAttribute","targetGeometry","morphColors","influences","morphTargetInfluences","deleteAttribute","bound","morphArray","setMorphTime","timeChanged","actualDuration","newTime","isTimeVarying","update","getVisibility","visible","setVisibility","pickableUpdateRequired","setAlpha","alpha","transparentChanged","flag","frustumCulled","setVertexColors","getColour","setColour","getColourHex","getHexString","setColourHex","hex","setHex","setMaterial","dispose","getClosestVertexIndex","closestIndex","setFromBufferAttribute","center","getCenter","distance","currentDistance","current","count","fromArray","array","distanceTo","getClosestVertex","applyMatrixWorld","found","multiplyScalar","applyMatrix4","matrixWorld","getBoundingBox","box","setFromArray","set","updateWorldMatrix","updateMarker","playAnimation","displayMarkers","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","getClosestVertexDOMElementCoords","scene","inView","project","Math","getZincCameraControls","getRelativeCoordsFromNDC","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","MathUtils","generateUUID","type","colors","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","matrix","vertex","normalMatrix","Matrix3","getNormalMatrix","il","face","applyMatrix3","normalize","j","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","index","console","error","groups","group","start","getX","computeFaceNormals","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","Array","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","Sphere","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","k","kl","mergeMesh","isMesh","mergeVertices","precisionPoints","verticesMap","unique","changes","precision","pow","key","round","faceIndicesToRemove","indices","n","idx","splice","diff","points","point","l","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","value","enabled","getNormalIndex","hash","toString","normalsHash","getColorIndex","r","g","colorsHash","getHex","getUvIndex","uvsHash","data","metadata","version","generator","parameters","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","computeGroups","DirectGeometry","fromGeometry","buffergeometry","positions","Float32Array","BufferAttribute","copyVector3sArray","copyColorsArray","copyVector2sArray","attribute","Float32BufferAttribute","copyVector4sArray","buffer","copyArray","colorArray","colorsArray","setIndex","normalsArray","computeTangents","computeLineDistances","applyMatrix","warn","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","isVector3","isArray","isColor","resolveURL","url","actualURL","prefix","test","callback","errorCallback","request","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","urls","partialCallback","text","urlIndex","result","numComplete","numUrls","getColorsRGB","index_in_colors","floor","remainder","hex_value","mycolor","copyMorphColorsToBufferGeometry","bufferGeometry","morphColor","tolerance","Number","EPSILON","hashToIndex","getIndex","vertexCount","nextIndex","attributeNames","keys","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","itemSize","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","isInterleavedBufferAttribute","setArray","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","markerImage","Image","src","texture","Texture","image","size","zincObject","spriteMaterial","sprite","Group","parent","isMarker","initialise","SpriteMaterial","alphaTest","depthTest","depthWrite","sizeAttenuation","Sprite","porportion","setSpriteSize","shader","vertexShader","replace","join","idIn","glyphsetIn","FaceColors","label","labelString","isGlyph","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","Label","getGroup","getLabel","getMesh","setTransformation","axis1","axis2","axis3","elements","SpriteText","default","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","_current_positions","_current_axis1s","_current_axis2s","_current_axis3s","_current_scales","_current_colors","_glyph_axis_array","load","glyphsetData","glyphURL","finishCallback","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","loader","InstancedMesh","parse","meshloader","materials","crossOrigin","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","setRGB","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","tempGeometry","getMatrixAt","setFromMatrixPosition","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","VideoHandler","manager","withCredentials","paramsString","onLoad","onProgress","onError","texturePath","extractUrlBase","params","split","paramsStrings","setWithCredentials","json","JSON","toLowerCase","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","dstNormals","srcNormals","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","concat","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","singleSided","flipSided","specularCoef","shininess","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","textureLoader","TextureLoader","materialLoader","MaterialLoader","loadTexture","path","repeat","wrap","anisotropy","setCrossOrigin","wrapS","RepeatWrapping","wrapT","MirroredRepeatWrapping","textures","blending","specular","emissive","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","getCircularTexture","setSize","setSizeAttenuation","_inverseMatrix","_ray","Ray","_sphere","_position","_morphA","_tempA","PointsMaterial","updateMorphTargets","raycast","raycaster","intersects","threshold","drawRange","ray","intersectsSphere","invert","localThreshold","localThresholdSq","isBufferGeometry","positionAttribute","morphPosition","end","calculatePosition","testPoint","morphTargetDictionary","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","origin","near","far","distanceToRay","morphInfluences","influence","addScaledVector","sub","isLines","createLineSegment","line","LineSegments","setWidth","width","linewidth","_start","_end","Line","isLineSegments","_morphB","_tempB","LineBasicMaterial","vStart","vEnd","interSegment","interRay","step","distSq","distanceSqToSegment","faceIndex","isTextureArray","loadFromImages","srcArrays","h","isLoading","canvas","dataStacks","imageToUint8Array","height","fullArray","forEach","impl","DataTexture2DArray","depth","getMaterial","vs","fs","ShaderMaterial","uniforms","fragmentShader","glslVersion","isTexture","loadImage","img","Promise","resolve","reject","onload","onerror","ctx","getContext","drawImage","getImageData","isReady","textureIn","TexturePrimitive","isTextureSlides","createSlides","slideSettings","slide","direction","PlaneGeometry","getUniforms","diffuse","getSlides","children","removeSlide","getObjectById","disppose","expandByPoint","GLSL3","isTexturePrimitive","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","onWindowResize","localRect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","isWebGL2","capabilities","SceneLoader","SceneExporter","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","sceneLoader","minimap","rootRegion","Region","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","pickableObjectsList","forcePickableObjectsUpdate","getDownloadProgress","aspect","updateProjectionMatrix","onResize","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","settings","viewPort","setFromObject","setCurrentCameraSettings","setupMultipleViews","defaultView","entries","viewport","addViewport","setDefaultViewport","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","findPointsetsWithGroupName","findGlyphsetsWithGroupName","findLinesWithGroupName","findObjectsWithGroupName","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","objectsArray","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","zincObjects","getNamedObjectsScreenXY","addZincObject","calculateMaxAllowedDistance","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","loadGLTF","removeObject","toBeDownloaded","pause","setTime","myPlayRate","setVideoHandler","videoHandlerIn","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","clear","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","objectIsInRegion","alignBoundingBoxToCameraView","transitionTime","targetPosition","eyePosition","upVector","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","updatePickableThreeJSObjects","getPickableThreeJSObjects","checkPickableUpdateRequred","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","exportGLTF","binary","exporter","getRootRegion","STLLoader","OBJLoader","PrimitivesLoader","createNewURL","reference","newURL","URL","href","progressMap","viewLoaded","errorDownload","primitivesLoader","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","loadMultipleViews","referenceURL","views","Default","Inline","Entries","promises","fetch","then","response","catch","all","values","entry","setCurrentViewport","xmlhttp","viewData","requestURL","number","filename","targetRegion","numberOfResources","linesloader","newLines","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","objloader","traverse","child","zincGeometry","addMeshToZincGeometry","loadSurfaceURL","fileFormat","metaFinishCallback","numberOfDownloaded","downloadedItem","addZincGeometry","newGeometry","parseDuration","durationString","match","loadSettings","item","readPrimitivesItem","order","FileFormat","AnatomicalId","compression","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","GLTFToZincJSLoader","loadRegions","currentRegion","regions","Primitives","primitive","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","getNumberOfDownloadsInArray","includeViews","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","Version","Regions","readVersionOneRegionPath","RegionPath","loadVersionOne","numberOfObjects","loadVersionTwo","Settings","Views","responseURL","setPath","setResponseType","setRequestHeader","requestHeader","e","itemError","matchDataViewAt","query","reader","getUint8","binData","array_buffer","charCodeAt","DataView","n_faces","getUint32","byteLength","solid","off","defaultR","defaultG","defaultB","hasColors","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","componentIdx","patternSolid","patternFace","faceCounter","patternFloat","patternVertex","RegExp","patternNormal","groupCount","startVertex","endVertex","exec","vertexCountPerFace","normalCountPerFace","parseFloat","addGroup","decodeText","_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_vA","_vB","_vC","_ab","_cb","ParserState","state","objects","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","hasUVIndices","smooth","startMaterial","libraries","previous","inherited","mtllib","groupStart","groupEnd","cloned","bind","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","dst","addVertexPoint","addVertexLine","addNormal","addFaceNormal","addColor","addUV","addDefaultUV","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","nLen","uvLen","addPointGeometry","vi","addLineGeometry","uvi","setMaterials","indexOf","lines","lineFirstChar","lineLength","trimLeft","trim","charAt","lineData","substr","vertexData","faceVertices","vertexParts","lineParts","substring","lineVertices","lineUVs","parts","li","llen","pointData","hasPrimitives","hasVertexColors","createdMaterials","miLen","sourceMaterial","materialHash","materialLine","Material","materialPoints","flatShading","concurrentDownloads","waitingList","onLoadCallback","onFinally","onErrorCallback","loadFromWaitingList","shift","GLTFLoader","parseGLTFObjects","rotation","quaternion","setCamera","cameraControls","lastIndexOf","gltf","log","GLTFExporter","getAllObjects","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","unregister","input","onDone","GLTFWriter","plugins","setPlugins","write","WEBGL_CONSTANTS","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","CLAMP_TO_EDGE","MIRRORED_REPEAT","REPEAT","THREE_TO_WEBGL","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","ClampToEdgeWrapping","PATH_PROPERTIES","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","every","element","stringToArrayBuffer","window","TextEncoder","encode","ArrayBuffer","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","cachedCanvas","pending","buffers","byteOffset","nodeMap","Map","skins","extensionsUsed","uids","uid","asset","cache","meshes","attributesNormalized","images","trs","onlyVisible","truncateDrawRange","embedImages","maxTextureSize","includeCustomExtensions","processInput","blob","Blob","extensionsUsedList","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","setUint32","jsonChunk","stringify","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","uri","serializeUserData","objectDef","gltfExtensions","extensionName","extensions","extras","message","getUID","has","isNormalizedNormalAttribute","abs","createNormalizedNormalAttribute","setX","setXYZ","applyTextureTransform","mapDef","didTransform","transformDef","toArray","processBuffer","processBufferView","componentType","bufferViews","componentSize","dataView","setFloat32","setUint16","setUint8","bufferViewDef","byteStride","processBufferViewImage","processAccessor","Error","end2","bufferViewTarget","minMax","bufferView","accessorDef","normalized","accessors","processImage","flipY","cachedImages","mimeType","RGBAFormat","imageDef","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","Uint8ClampedArray","putImageData","ImageData","toBlob","bufferViewIndex","toDataURL","processSampler","samplers","samplerDef","processTexture","textureDef","sampler","_invokeAll","ext","writeTexture","processMaterial","isShaderMaterial","materialDef","pbrMetallicRoughness","isMeshStandardMaterial","isMeshBasicMaterial","baseColorFactor","metallicFactor","metalness","roughnessFactor","roughness","metalRoughMapDef","metallicRoughnessTexture","baseColorMapDef","baseColorTexture","emissiveIntensity","maxEmissiveComponent","emissiveFactor","emissiveMapDef","emissiveTexture","normalMapDef","normalTexture","occlusionMapDef","texCoord","aoMapIntensity","strength","occlusionTexture","alphaMode","alphaCutoff","doubleSided","writeMaterial","processMesh","meshCacheKeyParts","meshCacheKey","mode","isLineLoop","meshDef","primitives","targets","nameConversion","skinWeight","skinIndex","originalNormal","modifiedAttribute","attributeName","toUpperCase","validVertexAttributes","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","morphTargetsRelative","isMultiMaterial","cacheKey","writeMesh","processCamera","cameras","isOrtho","isOrthographicCamera","cameraDef","orthographic","xmag","right","ymag","zfar","znear","perspective","aspectRatio","yfov","degToRad","fov","processAnimation","root","Utils","mergeMorphTargetTracks","tracks","channels","track","trackBinding","PropertyBinding","parseTrackName","trackNode","findNode","nodeName","trackProperty","propertyName","objectName","isSkinnedMesh","skeleton","getBoneByName","objectIndex","outputItemSize","times","interpolation","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","getInterpolation","InterpolateDiscrete","node","processSkin","nodes","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","boneInverses","multiply","bindMatrix","skin","processNode","nodeDef","translation","meshIndex","isCamera","nodeIndex","writeNode","processScene","scenes","sceneDef","processObjects","beforeParse","objectsWithoutScene","afterParse","func","light","isLight","isDirectionalLight","isPointLight","isSpotLight","lightDef","intensity","spot","innerConeAngle","penumbra","outerConeAngle","decay","lights","isGLTFSpecularGlossinessMaterial","extensionDef","diffuseFactor","specularFactor","glossinessFactor","glossiness","diffuseTexture","specularMapDef","specularGlossinessTexture","insertKeyframe","valueSize","getValueSize","TimeBufferType","ValueBufferType","interpolant","evaluate","slice","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","propertyIndex","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","setInterpolation","InterpolateLinear","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","nearPlane","farPlane","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","SYNC_CONTROL","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","ROTATE_DIRECTION","FREE","HORIZONTAL","VERTICAL","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","scrollRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","mouseScroll","rotateMode","_state","zincRayCaster","targetTouchId","rect","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setRotationMode","getNDCFromDocumentCoords","positionIn","updateRect","out_x","out_y","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentEnter","forced","observer","IntersectionObserver","boundingClientRect","disconnect","observe","onDocumentWheelEvent","deltaY","stopImmediatePropagation","fact","unproject","getVectorsFromRotateAboutLookAtPoints","axis","dot","up","rel_eyea","rel_eyeb","rel_eyec","upa","upb","upc","cos_angle","cos","sin_angle","sin","returned_values","tumble","delta_x","delta_y","tangent_dist","phi","acos","PI","calculateZoomDelta","changeZoomByValue","dist","near_far_minimum_ratio","flyZoom","directionalLightIn","addEventListener","removeEventListener","loadPath","pathData","CameraPath","NumberOfPoints","loadPathURL","path_url","updateTime","getTime","timeIn","getNumberOfTimeFrame","getCurrentTimeFrame","setCurrentTimeFrame","targetTimeFrame","updatePath","time_frame","bot_pos","top_pos","calculatePathNow","handleSyncControl","triggerCallback","zoom","controlEnabled","isTransitionCompleted","ROTATE_CAMERA_TRANSITION","stopOnCameraInput","playPath","stopPath","isPlayingPath","enableDirectionalLightUpdateWithPath","enableDeviceOrientation","ModifiedDeviceOrientationControls","disableDeviceOrientation","isDeviceOrientationEnabled","newViewport","view_angle","clip_distance","eyex","eyey","eyez","eye_distance","tan","localEyePosition","localNearPlane","nearClippingFactor","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","isSyncControl","currentMpde","enableSyncControl","NDCCameraControl","disableSyncControl","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hoverCallbackFunction","Raycaster","mouse","awaiting","lastHoveredDate","lastHoveredEmpty","timeDiff","pickedObjects","lastPosition","zincCamera","getIntersectsObject","threejsScene","setFromCamera","intersectObjects","hovered","setTimeout","awaitMove","tumbleAxis","computeTumbleAxisAngle","tumbleDirection","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","_stereo","updateMatrixWorld","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","orientation","setObjectQuaternion","zee","euler","Euler","q0","Quaternion","q1","beta","gamma","orient","setFromEuler","setFromAxisAngle","applyQuaternion","connect","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","parentIn","tMatrix","isRegion","hideAllPrimitives","showAllPrimitives","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","createChild","getChildWithName","childName","lowerChildName","findChildFromSeparatedPath","pathArray","findChildFromPath","createChildFromSeparatedPath","createChildFromPath","transverse","objectsList","pickMarkers","boundingBox1","childObjects","lowerObjectName","lowerGroupName","primitivesArray","geometriesArray","filter","pointsetsArray","glyphsetsArray","linesArray","getChildRegions","allObjects","targetScene","helper","positionAttributes","_box","_center","coord","new_coord","diameter","getBoundary","v4","cameraControl","ThreeBSP","work","BufferGeometryLoader","hostIn","host","core","worker","myResolve","createGeometryFromJSON","JSONParser","workerEventHandler","ev","action","csg","GeometryCSGInternal","postMessage","getHostGeometry","tempCSG","createZincGeometry","getGeometry","csgMesh","newMesh","toMesh","setCSG","CSG","sendToWork","guestGeometry","intersect","newCSG","subtract","terminateWorker","terminate","COPLANAR","FRONT","BACK","SPANNING","_length_i","polygon","polygons","Node","tree","Polygon","Vertex","Face4","calculateProperties","other_tree","clipTo","build","allPolygons","toGeometry","polygon_vertice_count","vertex_idx_a","vertex_idx_b","vertex_idx_c","verticeUvs","getInverse","polygon_count","vertice_dict","setFromRotationMatrix","vertice_count","flip","classifyVertex","side_value","classifySide","classification","num_positive","num_negative","splitPolygon","coplanar_front","coplanar_back","front","back","ti","tj","vj","t","interpolate","scalar","lerp","other","divider","isConvex","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;AClFAA,mBAAO,CAAC,CAAD,C,CAEP;;;;;GAOA,GAAMC,KAAI,CAAG,UAAW,CACtB,KAAKC,QAAL,CAAgB,QADM,CAEtB,KAAKC,oBAAL,CAA4B,QAFN,CAGtB,KAAKC,cAAL,CAAsB,CAHA,CAItB,KAAKC,WAAL,OAJsB,CAKtB,KAAKC,QAAL,CAAgBN,mBAAO,CAAC,CAAD,CAAP,CAAiCM,QAL3B,CAMtB,KAAKC,KAAL,CAAaP,mBAAO,CAAC,EAAD,CAAP,CAA8BO,KANrB,CAOtB,KAAKC,QAAL,CAAgBR,mBAAO,CAAC,EAAD,CAAP,CAAiCQ,QAP3B,CAQtB,KAAKC,QAAL,CAAgBT,mBAAO,CAAC,EAAD,CAAP,CAAiCS,QAR3B,CAStB,KAAKC,KAAL,CAAaV,mBAAO,CAAC,EAAD,CAAP,CAA8BU,KATrB,CAUtB,KAAKC,YAAL,CAAoBX,mBAAO,CAAC,EAAD,CAAP,CAAkCW,YAVhC,CAWtB,KAAKC,aAAL,CAAqBZ,mBAAO,CAAC,EAAD,CAAP,CAAsCY,aAXrC,CAYtB,KAAKC,QAAL,CAAgBb,mBAAO,CAAC,EAAD,CAAP,CAAsBa,QAZhB,CAatB,KAAKC,KAAL,CAAad,mBAAO,CAAC,EAAD,CAAP,CAAmBc,KAbV,CActB,KAAKC,WAAL,CAAmBf,mBAAO,CAAC,EAAD,CAAP,CAAyBe,WAdtB,CAetB,KAAKC,WAAL,CAAmBhB,mBAAO,CAAC,EAAD,CAAP,CAAyBgB,WAftB,CAgBtB,KAAKC,QAAL,CAAgBjB,mBAAO,CAAC,EAAD,CAAP,CAAsBiB,QAhBhB,CAiBtB,KAAKC,cAAL,CAAsBlB,mBAAO,CAAC,EAAD,CAAP,CAAsBkB,cAjBtB,CAkBtB,KAAKC,sBAAL,CAA8BnB,mBAAO,CAAC,EAAD,CAAP,CAAsBmB,sBAlB9B,CAmBtB,KAAKC,SAAL,CAAiBpB,mBAAO,CAAC,EAAD,CAAP,CAAsBoB,SAnBjB,CAoBtB,KAAKC,gBAAL,CAAwBrB,mBAAO,CAAC,EAAD,CAAP,CAAsBqB,gBApBxB,CAqBtB,KAAKC,YAAL,CAAoBtB,mBAAO,CAAC,EAAD,CAAP,CAAsBsB,YArBpB,CAsBtB,KAAKC,gBAAL,CAAwBvB,mBAAO,CAAC,CAAD,CAAP,CAAuBuB,gBAtBzB,CAuBtB,KAAKC,iBAAL,CAAyBxB,mBAAO,CAAC,CAAD,CAAP,CAAuBwB,iBAvB1B,CAwBtB,KAAKC,KAAL,CAAazB,mBAAO,CAAC,CAAD,CAErB,CA1BD,CA4BA0B,MAAM,CAACC,OAAP,CAAiB,GAAI1B,K;;;;;;ACrCrB,yC;;;;;;GCAMwB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAWfM,QAAQ,CAAG,UAAY,CAE5B;AAIC;;;;;;;;;;;;KAN2B,CA8E3B;;KA9E2B,CAqG5B;;;;IApGEN,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CAD2B,CAG5B,KAAKC,YAAL,OAH4B,CAI3B,KAAKC,UAAL,GAJ2B,CAmB5B,KAAKC,UAAL,CAAkB,CAACC,UAAD,CAAaC,UAAb,CAAyBC,OAAzB,GAAqC,CACtD,KAAI,KAAKC,QAAL,EAAiB,KAAKC,KAAtB,EAAgC,MAAAJ,UAApC,GAEA;AAFA,GAGIG,SAAQ,CAAG,KAAKE,gBAAL,CAAsBL,UAAtB,CAAkCE,OAAlC,CAHf,CAKII,aAAa,GALjB,CAMI,EAAMJ,OAAO,CAACK,OANlB,GAOGD,aAAa,GAPhB,EASA,GAAIE,SAAJ,CACA,GAAI,SAAAL,QAAQ,CAACM,MAAb,CAAmC,CAC/B,GAAMC,aAAY,CAAGR,OAAO,CAACS,gBAAR,EAA4BT,OAAO,CAACU,gBAAzD,CACCX,UAF8B,EAGjCO,QAAQ,CAAGP,UAHsB,CAIjCO,QAAQ,CAACE,YAAT,CAAwBA,YAJS,CAKjCF,QAAQ,CAACK,YAAT,CAAwBX,OAAO,CAACS,gBALC,EAO7BR,QAAQ,WAAYX,MAAK,CAACsB,cAA1B,EAA4C,SAAAX,QAAQ,CAACY,UAAT,CAAoBC,KAPnC,CAQhCR,QAAQ,CAAG,GAAIhB,MAAK,CAACyB,iBAAV,CAA4B,CACtCD,KAAK,CAAGd,OAAO,CAACgB,MADsB,CAEtCR,YAAY,CAAGA,YAFuB,CAGtCG,YAAY,CAAGX,OAAO,CAACS,gBAHe,CAItCQ,WAAW,CAAGb,aAJwB,CAKtCC,OAAO,CAAGL,OAAO,CAACK,OALoB,CAMtCa,IAAI,CAAG5B,KAAK,CAAC6B,UANyB,CAA5B,CARqB,CAiBhCb,QAAQ,CAAG,GAAIhB,MAAK,CAACyB,iBAAV,CAA4B,CACtCD,KAAK,CAAGd,OAAO,CAACgB,MADsB,CAEtCR,YAAY,CAAGA,YAFuB,CAGtCG,YAAY,CAAGX,OAAO,CAACS,gBAHe,CAItCW,YAAY,CAAG9B,KAAK,CAAC+B,YAJiB,CAKtCJ,WAAW,CAAGb,aALwB,CAMtCC,OAAO,CAAGL,OAAO,CAACK,OANoB,CAOtCa,IAAI,CAAG5B,KAAK,CAAC6B,UAPyB,CAA5B,CAjBqB,CA6B9BnB,OAAO,CAACU,gBAAR,EAA4BT,QAAQ,CAACqB,eAAT,MA7BE,GA8BjChB,QAAQ,CAACiB,eAAT,CAA4B1D,mBAAO,CAAC,CAAD,CAAP,CAA2B2D,iBAA5B,EA9BM,CAgClC,CAhCD,IAgCO,CACN,GAAIC,aAAY,CAAGxB,QAAQ,CAACM,MAAT,CAAgBmB,wBAAhB,EAAnB,CACApB,QAAQ,CAAG,GAAIhB,MAAK,CAACqC,iBAAV,CAA4B,CACtCnB,YAAY,CAAGR,OAAO,CAACS,gBADe,CAEtCK,KAAK,CAAG,GAAIxB,MAAK,CAACsC,KAAV,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAF8B,CAGtCX,WAAW,CAAGb,aAHwB,CAItCC,OAAO,CAAGL,OAAO,CAACK,OAJoB,CAKtCwB,GAAG,CAAGJ,YALgC,CAMtCP,IAAI,CAAG5B,KAAK,CAAC6B,UANyB,CAA5B,CAFL,CAUN,KAAKxB,YAAL,CAAoBM,QAAQ,CAACM,MAC7B,CACD,GAAIuB,KAAI,CAAG,GAAIxC,MAAK,CAACyC,IAAV,CAAe9B,QAAf,CAAyBK,QAAzB,CAAX,CACA,KAAK0B,OAAL,CAAaF,IAAb,CAAmB9B,OAAO,CAACS,gBAA3B,CAA6CT,OAAO,CAACU,gBAArD,CAvDA,CAwDA,CA5E2B,CAiF5B,KAAKuB,YAAL,CAAoB,IAAM,CACzB,KAAKhC,QAAL,CAAciC,kBAAd,EADyB,IAEnBC,IAAG,CAAG,KAAKlC,QAAL,CAAcmC,WAAd,CAA0BD,GAFb,CAEkBE,GAAG,CAAG,KAAKpC,QAAL,CAAcmC,WAAd,CAA0BC,GAFlD,CAGnBC,MAAM,CAAG,GAAIhD,MAAK,CAACiD,OAAV,CAAkB,EAAIF,GAAG,CAACG,CAA1B,CAA6B,EAAIH,GAAG,CAACI,CAArC,CAHU,CAInBC,KAAK,CAAG,GAAIpD,MAAK,CAACiD,OAAV,CAAkBJ,GAAG,CAACK,CAAJ,CAAQH,GAAG,CAACG,CAA9B,CAAiCL,GAAG,CAACM,CAAJ,CAAQJ,GAAG,CAACI,CAA7C,CAJW,CAKzB,KAAKxC,QAAL,CAAc0C,aAAd,CAA4B,CAA5B,EAAiC,EALR,CAMzB,IAAK,GAAIC,EAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG,KAAK3C,QAAL,CAAc4C,KAAd,CAAoBC,MAAxC,CAAiDF,CAAC,EAAlD,CAAsD,IAC5CG,GAAE,CAAG,KAAK9C,QAAL,CAAc+C,QAAd,CAAuB,KAAK/C,QAAL,CAAc4C,KAAd,CAAoBD,CAApB,EAAuBK,CAA9C,CADuC,CAE5CC,EAAE,CAAG,KAAKjD,QAAL,CAAc+C,QAAd,CAAuB,KAAK/C,QAAL,CAAc4C,KAAd,CAAoBD,CAApB,EAAuBO,CAA9C,CAFuC,CAG5CC,EAAE,CAAG,KAAKnD,QAAL,CAAc+C,QAAd,CAAuB,KAAK/C,QAAL,CAAc4C,KAAd,CAAoBD,CAApB,EAAuBS,CAA9C,CAHuC,CAIlDpD,QAAQ,CAAC0C,aAAT,CAAuB,CAAvB,EAA0BW,IAA1B,CACI,CACI,GAAIhE,MAAK,CAACiD,OAAV,CAAkB,CAACQ,EAAE,CAACP,CAAH,CAAOF,MAAM,CAACE,CAAf,EAAkBE,KAAK,CAACF,CAA1C,CAA6C,CAACO,EAAE,CAACN,CAAH,CAAOH,MAAM,CAACG,CAAf,EAAkBC,KAAK,CAACD,CAArE,CADJ,CAEI,GAAInD,MAAK,CAACiD,OAAV,CAAkB,CAACW,EAAE,CAACV,CAAH,CAAOF,MAAM,CAACE,CAAf,EAAkBE,KAAK,CAACF,CAA1C,CAA6C,CAACU,EAAE,CAACT,CAAH,CAAOH,MAAM,CAACG,CAAf,EAAkBC,KAAK,CAACD,CAArE,CAFJ,CAGI,GAAInD,MAAK,CAACiD,OAAV,CAAkB,CAACa,EAAE,CAACZ,CAAH,CAAOF,MAAM,CAACE,CAAf,EAAkBE,KAAK,CAACF,CAA1C,CAA6C,CAACY,EAAE,CAACX,CAAH,CAAOH,MAAM,CAACG,CAAf,EAAkBC,KAAK,CAACD,CAArE,CAHJ,CADJ,CAMH,CACDxC,QAAQ,CAACsD,aAAT,GACA,CAnG2B,CA0G5B,KAAKC,YAAL,CAAoBC,SAAS,EAAI,CAChC,KAAKvD,KAAL,CAAWI,QAAX,CAAoBmD,SAApB,CAAgCA,SAChC,CAED,C,CAvHD;;;;;;;;GAyHAtF,QAAQ,CAACuF,SAAT,CAAqBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CACrBlE,OAAO,CAACrB,QAAR,CAAmBA,Q;;;;;;AC5HnB,kC;;;;;;GCAMmB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfgG,aAAa,CAAGhG,mBAAO,CAAC,CAAD,CAAP,CAA6BM,Q,CAE/C2F,SAAS,CAAG,C,CAEVC,WAAW,CAAG,UAAY,CAC9B,MAAO,KAAOD,SAAS,EACxB,C,CAUKrE,UAAU,CAAG,UAAW,CAG5B;AAEA;AACA;AAEA;;IAR4B,CAiB7B;;;;IAhBC,KAAKuE,YAAL,GAD4B,CAE5B,KAAK/D,QAAL,OAF4B,CAI5B,KAAKC,KAAL,OAJ4B,CAO5B,KAAK+D,aAAL,OAP4B,CAW5B,KAAKC,SAAL,OAX4B,CAY5B,KAAKC,WAAL,GAZ4B,CAa5B,KAAKC,WAAL,GAb4B,CAc5B,KAAKC,WAAL,CAAmB,CAdS,CAe5B,KAAKC,KAAL,OAf4B,CAgB5B,KAAKC,cAAL,OAhB4B,CAsB5B,KAAKC,QAAL,CAAgB,GAtBY,CAuB5B,KAAKC,UAAL,OAvB4B,CAwB5B,KAAKC,QAAL,CAAgB,EAxBY,CAyB5B,KAAK/E,YAAL,OAzB4B,CA0B5B,KAAKgF,MAAL,OA1B4B,CA2B5B,KAAKC,oBAAL,GA3B4B,CA4B5B,KAAKC,kBAAL,CAA0B,CAAC,CA5BC,CA6B5B,KAAKC,yBAAL,GA7B4B,CA8B5B,KAAKC,iBAAL,CAAyB,GAAIzF,MAAK,CAAC0F,IA9BP,CA+B5B,KAAKC,OAAL,CAAe,GAAI3F,MAAK,CAAC4F,OA/BG,CAgC5B,KAAKC,YAAL,OAhC4B,CAiC5B,KAAKC,MAAL,OAjC4B,CAkC5B,KAAKC,aAAL,OAlC4B,CAmC5B,KAAKC,IAAL,CAAYvB,WAAW,EACxB,C,CAODtE,UAAU,CAACiE,SAAX,CAAqB6B,WAArB,CAAmC,SAASC,UAAT,CAAqB,CACtD,KAAKhB,QAAL,CAAgBgB,UADsC,CAElD,KAAKf,UAF6C,EAGpD,KAAKA,UAAL,CAAgBc,WAAhB,CAA4B,KAAKf,QAAjC,CAEH,C,CAOD/E,UAAU,CAACiE,SAAX,CAAqB+B,WAArB,CAAmC,UAAW,CAC5C,MAAO,MAAKjB,QACb,C,CAOD/E,UAAU,CAACiE,SAAX,CAAqBgC,SAArB,CAAiC,SAASN,MAAT,CAAiB,CAChD,KAAKA,MAAL,CAAcA,MACf,C,CAOD3F,UAAU,CAACiE,SAAX,CAAqBiC,SAArB,CAAiC,UAAW,CAC1C,MAAO,MAAKP,MACb,C,CAKD3F,UAAU,CAACiE,SAAX,CAAqBvD,gBAArB,CAAwC,SAASL,UAAT,CAAqBE,OAArB,CAA8B,CACpE,GAAIC,SAAJ,CAiBA,MAhBIH,WAAU,WAAY+D,cAgB1B,EAfM7D,OAAO,CAACS,gBAAR,EAA4B,CAACX,UAAU,CAAC8F,iBAAxC,GACD,MAAA9F,UAAU,CAACa,YAAX,EAA0E,CAAlC,EAAAb,UAAU,CAACa,YAAX,CAAwBmC,MAD/D,CAeN,EAbIhD,UAAU,CAAC+F,mBAAX,EAaJ,CAZE5F,QAAQ,CAAGH,UAAU,CAACgG,uBAAX,EAYb,CAXM9F,OAAO,CAACU,gBAWd,EAVI7C,mBAAO,CAAC,CAAD,CAAP,CAAwBkI,sCAAxB,CAA+DjG,UAA/D,CAA2EG,QAA3E,CAUJ,EARWH,UAAU,WAAYR,MAAK,CAACsB,cAQvC,GAPEX,QAAQ,CAAGH,UAAU,CAACkG,KAAX,EAOb,EALA/F,QAAQ,CAACgG,gBAAT,GAKA,CAJAhG,QAAQ,CAACiC,kBAAT,EAIA,CAHAjC,QAAQ,CAACiG,qBAAT,EAGA,CAFIpG,UAAU,CAACS,MAEf,GADEN,QAAQ,CAACM,MAAT,CAAkBT,UAAU,CAACS,MAC/B,EAAON,QACR,C,CAMDR,UAAU,CAACiE,SAAX,CAAqByC,6BAArB,CAAqD,UAAW,CAC9D,GAAI,KAAKvG,UAAL,EAAmB,KAAKM,KAAL,CAAWI,QAA9B,EAA0C,KAAKJ,KAAL,CAAWI,QAAX,CAAoBW,WAAlE,CAA+E,CAC7E,GAAI,CAAC,KAAKgD,aAAV,CAAyB,CACvB,GAAImC,kBAAiB,CAAG,KAAKlG,KAAL,CAAWI,QAAX,CAAoB0F,KAApB,EAAxB,CACAI,iBAAiB,CAAClF,IAAlB,CAA0B5B,KAAK,CAAC+G,SAFT,CAGvB,KAAKpC,aAAL,CAAqB,GAAI3E,MAAK,CAACyC,IAAV,CAAe,KAAK7B,KAAL,CAAWD,QAA1B,CAAoCmG,iBAApC,CAHE,CAIvB,KAAKnC,aAAL,CAAmBqC,WAAnB,CAAiC,KAAKpG,KAAL,CAAWoG,WAAX,CAAyB,CAJnC,CAKvB,KAAKrC,aAAL,CAAmBS,QAAnB,CAA8B,IALP,CAMvB,KAAKT,aAAL,CAAmBsC,IAAnB,CAA0B,KAAKrC,SAChC,CACD,KAAKhE,KAAL,CAAWI,QAAX,CAAoBY,IAApB,CAA2B5B,KAAK,CAACkH,QAT4C,CAU7E,KAAKtG,KAAL,CAAWI,QAAX,CAAoBmG,WAApB,GAV6E,CAW7E,KAAKvG,KAAL,CAAWwG,GAAX,CAAe,KAAKzC,aAApB,CAX6E,CAY7E,KAAKM,cAAL,CAAoBmC,GAApB,CAAwB,KAAKzC,aAA7B,CACD,CACF,C,CAMDxE,UAAU,CAACiE,SAAX,CAAqBiD,6BAArB,CAAqD,UAAW,CAC1D,KAAK/G,UAAL,EAAmB,KAAKqE,aADkC,GAE5D,KAAK/D,KAAL,CAAW0G,MAAX,CAAkB,KAAK3C,aAAvB,CAF4D,CAG5D,KAAKM,cAAL,CAAoBsC,OAApB,CAA4B,KAAK5C,aAAjC,CAH4D,CAI5D,KAAKM,cAAL,CAAoBqC,MAApB,CAA2B,KAAK3C,aAAhC,CAJ4D,EAM9D,KAAK/D,KAAL,CAAWI,QAAX,CAAoBY,IAApB,CAA2B5B,KAAK,CAAC6B,UAClC,C,CAWD1B,UAAU,CAACiE,SAAX,CAAqB1B,OAArB,CAA+B,SAASF,IAAT,CAAerB,gBAAf,CAAiCC,gBAAjC,CAAmD,CAKhF,GAJA,KAAK6D,cAAL,CAAsB,GAAIjF,MAAK,CAACwH,oBAAV,CAA+BhF,IAA/B,CAItB,CAHA,KAAKwC,KAAL,CAAa,GAAIhF,MAAK,CAACyH,cAAV,CAAyB,KAAKxC,cAA9B,CAGb,CAFA,KAAKtE,QAAL,CAAgB6B,IAAI,CAAC7B,QAErB,CADA,KAAKwE,UAAL,OACA,CAAI,KAAKxE,QAAL,EAAiB,KAAKA,QAAL,CAAcqB,eAAnC,CAAoD,CAClD,GAAI0F,eAAc,CAAG,KAAK/G,QAAL,CAAcqB,eAAd,CAA8B2F,QAAnD,CACKD,cAF6C,GAGhDA,cAAc,CAAG,KAAK/G,QAAL,CAAcqB,eAAd,CAA8BR,KAA9B,CACf,KAAKb,QAAL,CAAcqB,eAAd,CAA8BR,KADf,CAEf,KAAKb,QAAL,CAAcqB,eAAd,CAA8B4F,MALgB,EAO9CF,cAP8C,GAQhD,KAAK3B,aAAL,CAAqB/F,KAAK,CAAC6H,aAAN,CAAoBC,mCAApB,CACnBJ,cADmB,CACH,EADG,IAR2B,CAU5C,KAAK3B,aAAL,EAAuB,WAAKA,aAAL,CAAmB,CAAnB,CAVqB,GAW9C,KAAKZ,UAAL,CAAkB,KAAKH,KAAL,CAAWG,UAAX,CAAsB,KAAKY,aAAL,CAAmB,CAAnB,CAAtB,EAA6CE,WAA7C,CAChB,KAAKf,QADW,CAX4B,CAa9C,KAAKC,UAAL,CAAgB4C,IAAhB,CAAuB/H,KAAK,CAACgI,QAbiB,CAc9C,KAAK7C,UAAL,CAAgB8C,iBAAhB,GAd8C,CAe9C,KAAK9C,UAAL,CAAgB+C,IAAhB,EAf8C,EAkBnD,CACD,KAAKrD,WAAL,CAAmB1D,gBAxB6D,CAyBhF,KAAK2D,WAAL,CAAmB1D,gBAzB6D,CA0BhF,KAAKR,KAAL,CAAa4B,IA1BmE,CA2BhF,KAAK5B,KAAL,CAAWwE,QAAX,CAAsB,IA3B0D,CA4BhF,KAAKxE,KAAL,CAAWuH,gBAAX,GA5BgF,CA6BhF,KAAKtB,6BAAL,EA7BgF,CA8B5E,KAAKhC,WA9BuE,CA+B9E,KAAKuD,gBAAL,IA/B8E,CAiC1E,KAAKtD,WAjCqE,GAkC5E,KAAKnE,QAAL,CAAc0H,YAAd,CAA2B,cAA3B,CAA2C,KAAK1H,QAAL,CAAc2H,YAAd,CAA4B,UAA5B,CAA3C,CAlC4E,CAmC5E,KAAK3H,QAAL,CAAc0H,YAAd,CAA2B,cAA3B,CAA2C,KAAK1H,QAAL,CAAc2H,YAAd,CAA4B,UAA5B,CAA3C,CAnC4E,EAsChF,KAAK9C,yBAAL,GACD,C,CAODrF,UAAU,CAACiE,SAAX,CAAqBmE,OAArB,CAA+B,SAASC,WAAT,CAAsB,CACnD,KAAK5D,SAAL,CAAiB4D,WADkC,CAE/C,KAAK5H,KAF0C,GAGjD,KAAKA,KAAL,CAAWqG,IAAX,CAAkB,KAAKrC,SAH0B,EAK/C,KAAKD,aAL0C,GAMjD,KAAKA,aAAL,CAAmBsC,IAAnB,CAA0B,KAAKrC,SANkB,CAQpD,C,CAQDzE,UAAU,CAACiE,SAAX,CAAqBqE,cAArB,CAAsC,UAAW,CAC/C,GAAI,KAAKtD,UAAT,CAAqB,CACnB,GAAMuD,MAAK,CAAG,KAAKvD,UAAL,CAAgBwD,IAAhB,CAAuB,KAAKxD,UAAL,CAAgByD,KAAhB,CAAsB1D,QAA3D,CACA,MAAO,MAAKA,QAAL,CAAgBwD,KACxB,CACC,MAAO,MAAK3D,WAEf,C,CAED,GAAM8D,0BAAyB,CAAG,SAASC,cAAT,CAAyBlI,KAAzB,CAAgC,CAChE,GAAIA,KAAK,EAAIkI,cAAT,EAA2BA,cAAc,CAAC9G,eAA1C,EACF8G,cAAc,CAAC9G,eAAf,MADF,CAC6C,IACrC+G,YAAW,CAAGD,cAAc,CAAC9G,eAAf,MADuB,CAErCgH,UAAU,CAAGpI,KAAK,CAACqI,qBAFkB,CAGrCzF,MAAM,CAAGwF,UAAU,CAACxF,MAHiB,CAI3CsF,cAAc,CAACI,eAAf,CAAgC,aAAhC,CAJ2C,CAK3CJ,cAAc,CAACI,eAAf,CAAgC,aAAhC,CAL2C,CAQ3C,OAFIC,MAAK,CAAG,CAEZ,CADIC,UAAU,CAAG,EACjB,CAAS9F,CAAC,CAAG,CAAb,CAAiB,EAAI6F,KAAL,EAAgB7F,CAAC,CAAGE,MAApC,CAA6CF,CAAC,EAA9C,CACsB,CAAhB,CAAA0F,UAAU,CAAC1F,CAAD,CADhB,GAEI6F,KAAK,EAFT,CAGIC,UAAU,CAACpF,IAAX,CAAgB,CAACV,CAAD,CAAI0F,UAAU,CAAC1F,CAAD,CAAd,CAAhB,CAHJ,EAMyB,CAArB,EAAA8F,UAAU,CAAC5F,MAd4B,EAezCsF,cAAc,CAACT,YAAf,CAA4B,aAA5B,CAA2CU,WAAW,CAAEK,UAAU,CAAC,CAAD,CAAV,CAAc,CAAd,CAAF,CAAtD,CAfyC,CAgBzCN,cAAc,CAACT,YAAf,CAA4B,aAA5B,CAA2CU,WAAW,CAAEK,UAAU,CAAC,CAAD,CAAV,CAAc,CAAd,CAAF,CAAtD,CAhByC,EAiBX,CAArB,EAAAA,UAAU,CAAC5F,MAjBqB,GAkBzCsF,cAAc,CAACT,YAAf,CAA4B,aAA5B,CAA2CU,WAAW,CAAEK,UAAU,CAAC,CAAD,CAAV,CAAc,CAAd,CAAF,CAAtD,CAlByC,CAmBzCN,cAAc,CAACT,YAAf,CAA4B,aAA5B,CAA2CU,WAAW,CAAEK,UAAU,CAAC,CAAD,CAAV,CAAc,CAAd,CAAF,CAAtD,CAnByC,CAqB5C,CACF,CAxBD,CA0BA;;;;IAuCA;;;;IAWA;;;IAQA;;;;IAYA;;;;;;IAwBA;;;;;;IAaA;;;;;IAaA;;;;IAWA;;;;IAYA;;;;IAaA;;;;IAWA;;;;IAeA;;;;IA+BA;;;;IAoCA;;;;IAyCA;;IAmBA;;IA2DA;;;;IAqBA;AAhYAjJ,UAAU,CAACiE,SAAX,CAAqBiF,YAArB,CAAoC,SAASV,IAAT,CAAe,CACjD,GAAIW,YAAW,GAAf,CACA,GAAI,KAAKnE,UAAT,CAAqB,IACbuD,MAAK,CAAGC,IAAI,CAAG,KAAKzD,QADP,CAEbqE,cAAc,CAAG,KAAKpE,UAAL,CAAgByD,KAAhB,CAAsB1D,QAF1B,CAGfsE,OAAO,CAAGd,KAAK,CAAGa,cAHH,CAIfC,OAAO,EAAI,KAAKrE,UAAL,CAAgBwD,IAJZ,GAKjB,KAAKxD,UAAL,CAAgBwD,IAAhB,CAAuBa,OALN,CAMjBF,WAAW,GANM,EAQfA,WAAW,EAAI,KAAKG,aAAL,EARA,EASjB,KAAKzE,KAAL,CAAW0E,MAAX,CAAmB,CAAnB,CAEH,CAXD,IAWO,CACL,GAAIF,SAAO,CAAGb,IAAd,CAEEa,QAHG,CAEDb,IAAI,CAAG,KAAKzD,QAFX,CAGO,KAAKA,QAHZ,CAII,EAAIyD,IAJR,CAKO,CALP,CAOOA,IAPP,CAQDa,QAAO,EAAI,KAAKzE,WARf,GASH,KAAKA,WAAL,CAAmByE,QAThB,CAUHF,WAAW,GAVR,CAYN,CACGA,WA1B6C,GA2B/C,KAAK9D,yBAAL,GA3B+C,CA4B/CqD,yBAAyB,CAAC,KAAKlI,QAAN,CAAgB,KAAKC,KAArB,CA5BsB,CA6B3C,KAAKiE,WA7BsC,GA8B7C,KAAKS,oBAAL,GA9B6C,EAgClD,C,CAODnF,UAAU,CAACiE,SAAX,CAAqBqF,aAArB,CAAqC,UAAW,UAC1C,KAAK5E,WAAL,EAAoB,KAAKC,WADiB,CAI/C,C,CAMD3E,UAAU,CAACiE,SAAX,CAAqBuF,aAArB,CAAqC,UAAW,CAC9C,MAAO,MAAK/I,KAAL,CAAWgJ,OACnB,C,CAODzJ,UAAU,CAACiE,SAAX,CAAqByF,aAArB,CAAqC,SAASD,OAAT,CAAkB,CACjD,KAAKhJ,KAAL,CAAWgJ,OAAX,GAAuBA,OAD0B,GAEnD,KAAKhJ,KAAL,CAAWgJ,OAAX,CAAqBA,OAF8B,CAG/C,KAAK9D,MAH0C,GAGlC,KAAKA,MAAL,CAAYgE,sBAAZ,GAHkC,EAKtD,C,CASD3J,UAAU,CAACiE,SAAX,CAAqB2F,QAArB,CAAgC,SAASC,KAAT,CAAgB,IACxChJ,SAAQ,CAAG,KAAKJ,KAAL,CAAWI,QADkB,CAE1CF,aAAa,GAF6B,CAGjC,CAAT,CAAAkJ,KAH0C,GAI5ClJ,aAAa,GAJ+B,EAK9C,GAAImJ,mBAAkB,CAAGjJ,QAAQ,CAACW,WAAT,EAAwBb,aAAjD,CACAE,QAAQ,CAACD,OAAT,CAAmBiJ,KAN2B,CAO9ChJ,QAAQ,CAACW,WAAT,CAAuBb,aAPuB,CAQ1CmJ,kBAR0C,GASxCnJ,aATwC,CAU1C,KAAK+F,6BAAL,EAV0C,CAY1C,KAAKQ,6BAAL,EAZ0C,EAa1C,KAAK1C,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QAbC,GAc5C,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4BD,OAA5B,CAAsCiJ,KAdM,CAe/C,C,CASD7J,UAAU,CAACiE,SAAX,CAAqBgE,gBAArB,CAAwC,SAAS8B,IAAT,CAAe,CACjD,KAAKtJ,KAD4C,GAEnD,KAAKA,KAAL,CAAWuJ,aAAX,CAA2BD,IAFwB,CAItD,C,CAQD/J,UAAU,CAACiE,SAAX,CAAqBgG,eAArB,CAAuC,SAAStI,YAAT,CAAuB,CAC5D,KAAKlB,KAAL,CAAWI,QAAX,CAAoBc,YAApB,CAAmCA,YADyB,CAE5D,KAAKnB,QAAL,CAAcgG,gBAAd,GAF4D,CAGxD,KAAKhC,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QAHe,GAI1D,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4Bc,YAA5B,CAA2CA,YAJe,CAK7D,C,CAOD3B,UAAU,CAACiE,SAAX,CAAqBiG,SAArB,CAAiC,UAAW,OACtC,MAAKzJ,KAAL,EAAc,KAAKA,KAAL,CAAWI,QADa,CAEjC,KAAKJ,KAAL,CAAWI,QAAX,CAAoBQ,KAFa,OAI3C,C,CAODrB,UAAU,CAACiE,SAAX,CAAqBkG,SAArB,CAAiC,SAAS5I,MAAT,CAAiB,CAChD,KAAKd,KAAL,CAAWI,QAAX,CAAoBQ,KAApB,CAA4BE,MADoB,CAE5C,KAAKiD,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QAFG,GAG9C,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4BQ,KAA5B,CAAoCE,MAHU,EAIhD,KAAKf,QAAL,CAAcgG,gBAAd,GACD,C,CAODxG,UAAU,CAACiE,SAAX,CAAqBmG,YAArB,CAAoC,UAAW,OACzC,CAAC,KAAKzF,WADmC,EAEvC,KAAKlE,KAAL,EAAc,KAAKA,KAAL,CAAWI,QAAzB,EAAqC,KAAKJ,KAAL,CAAWI,QAAX,CAAoBQ,KAFlB,CAGlC,KAAKZ,KAAL,CAAWI,QAAX,CAAoBQ,KAApB,CAA0BgJ,YAA1B,EAHkC,OAM9C,C,CAODrK,UAAU,CAACiE,SAAX,CAAqBqG,YAArB,CAAoC,SAASC,GAAT,CAAc,CAChD,KAAK9J,KAAL,CAAWI,QAAX,CAAoBQ,KAApB,CAA0BmJ,MAA1B,CAAiCD,GAAjC,CADgD,CAE5C,KAAK/F,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QAFG,EAG9C,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4BQ,KAA5B,CAAkCmJ,MAAlC,CAAyCD,GAAzC,CACH,C,CAODvK,UAAU,CAACiE,SAAX,CAAqBwG,WAArB,CAAmC,SAAS5J,QAAT,CAAmB,CACpD,KAAKJ,KAAL,CAAWI,QAAX,CAAsBA,QAD8B,CAEpD,KAAKL,QAAL,CAAcgG,gBAAd,GAFoD,CAGhD,KAAKhC,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QAHO,GAIlD,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4B6J,OAA5B,EAJkD,CAKlD,KAAKlG,aAAL,CAAmB3D,QAAnB,CAA8BA,QAAQ,CAAC0F,KAAT,EALoB,CAMlD,KAAK/B,aAAL,CAAmB3D,QAAnB,CAA4BY,IAA5B,CAAmC5B,KAAK,CAAC+G,SANS,CAQrD,C,CAOD5G,UAAU,CAACiE,SAAX,CAAqB0G,qBAArB,CAA6C,UAAW,CACtD,GAAIC,aAAY,CAAG,CAAC,CAApB,CACA,GAAI,KAAKnK,KAAT,CAAgB,IACV+G,SAAQ,CAAG,KAAK/G,KAAL,CAAWD,QAAX,CAAoBY,UAApB,CAA+BoG,QADhC,CAEV7E,WAAW,CAAG,GAAI9C,MAAK,CAAC0F,IAAV,GAAiBsF,sBAAjB,CAAwCrD,QAAxC,CAFJ,CAGVsD,MAAM,CAAG,GAAIjL,MAAK,CAAC4F,OAHT,CAKd,GADA9C,WAAW,CAACoI,SAAZ,CAAsBD,MAAtB,CACA,CAAItD,QAAQ,EAAI7E,WAAhB,CAIE,OAHIqI,SAAQ,CAAG,CAAC,CAGhB,CAFIC,eAAe,CAAG,CAEtB,CADIC,OAAO,CAAG,GAAIrL,MAAK,CAAC4F,OACxB,CAAStC,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGqE,QAAQ,CAAC2D,KAA7B,CAAoChI,CAAC,EAArC,CACE+H,OAAO,CAACE,SAAR,CAAkB5D,QAAQ,CAAC6D,KAA3B,CAAsC,CAAJ,CAAAlI,CAAlC,CADF,CAEE8H,eAAe,CAAGC,OAAO,CAACI,UAAR,CAAmBR,MAAnB,CAFpB,CAGkB,CAAC,CAAb,EAAAE,QAHN,CAIIA,QAAQ,CAAGC,eAJf,CAKWD,QAAQ,CAAIC,eALvB,GAMID,QAAQ,CAAGC,eANf,CAOIL,YAAY,CAAGzH,CAPnB,CAWH,CACD,MAAOyH,aACR,C,CAOD5K,UAAU,CAACiE,SAAX,CAAqBsH,gBAArB,CAAwC,SAASC,gBAAT,CAA2B,CACjE,GAAIhE,SAAQ,CAAG,GAAI3H,MAAK,CAAC4F,OAAzB,CAIA,GAH+B,CAAC,CAA5B,OAAKL,kBAGT,GAFE,KAAKA,kBAAL,CAA0B,KAAKuF,qBAAL,EAE5B,EAA+B,CAA3B,OAAKvF,kBAAT,CAAkC,IAC5ByD,WAAU,CAAG,KAAKpI,KAAL,CAAWqI,qBADI,CAE5B1H,UAAU,CAAG,KAAKX,KAAL,CAAWD,QAAX,CAAoBqB,eAFL,CAGhC,GAAIgH,UAAU,EAAIzH,UAAd,EAA4BA,UAAU,CAACoG,QAA3C,CAAqD,CAEnD,OADIiE,MAAK,GACT,CAAStI,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG0F,UAAU,CAACxF,MAA/B,CAAuCF,CAAC,EAAxC,CACsB,CAAhB,CAAA0F,UAAU,CAAC1F,CAAD,CADhB,GAEIsI,KAAK,GAFT,CAGI,KAAKjG,OAAL,CAAa4F,SAAb,CACEhK,UAAU,CAACoG,QAAX,CAAoBrE,CAApB,EAAuBkI,KADzB,CAC0D,CAA1B,MAAKjG,kBADrC,CAHJ,CAKIoC,QAAQ,CAACP,GAAT,CAAa,KAAKzB,OAAL,CAAakG,cAAb,CAA4B7C,UAAU,CAAC1F,CAAD,CAAtC,CAAb,CALJ,EAQA,GAAIsI,KAAJ,CACE,MAAOD,iBAAgB,CAAGhE,QAAQ,CAACmE,YAAT,CAAsB,KAAKlL,KAAL,CAAWmL,WAAjC,CAAH,CAAmDpE,QAE7E,CAbD,IAgBE,OAFAA,SAAQ,CAAC4D,SAAT,CAAmB,KAAK3K,KAAL,CAAWD,QAAX,CAAoBY,UAApB,CAA+BoG,QAA/B,CAAwC6D,KAA3D,CAC4B,CAA1B,MAAKjG,kBADP,CAEA,CAAOoG,gBAAgB,CAAGhE,QAAQ,CAACmE,YAAT,CAAsB,KAAKlL,KAAL,CAAWmL,WAAjC,CAAH,CAAmDpE,QAE7E,CAED,MADA,MAAKqE,cAAL,GAAsBd,SAAtB,CAAgCvD,QAAhC,CACA,CAAOgE,gBAAgB,CAAGhE,QAAQ,CAACmE,YAAT,CAAsB,KAAKlL,KAAL,CAAWmL,WAAjC,CAAH,CAAmDpE,QAC3E,C,CAODxH,UAAU,CAACiE,SAAX,CAAqB4H,cAArB,CAAsC,UAAW,CAC/C,GAAI,KAAKpL,KAAL,EAAc,KAAKA,KAAL,CAAWgJ,OAA7B,CAAsC,CACpC,GAAI,KAAKpE,yBAAT,CAAoC,IAC9BwD,WAAU,CAAG,KAAKpI,KAAL,CAAWqI,qBADM,CAE9B1H,UAAU,OAFoB,CAG9B,KAAKX,KAAL,CAAWD,QAHmB,GAIhCY,UAAU,CAAG,KAAKX,KAAL,CAAWD,QAAX,CAAoBqB,eAJD,EAKlC,GAAI4J,MAAK,GAAT,CACA,GAAI5C,UAAU,EAAIzH,UAAd,EAA4BA,UAAU,CAACoG,QAA3C,CAAqD,CAInD,OAHI5E,IAAG,CAAG,GAAI/C,MAAK,CAAC4F,OAGpB,CAFI/C,GAAG,CAAG,GAAI7C,MAAK,CAAC4F,OAEpB,CADIqG,GAAG,CAAG,GAAIjM,MAAK,CAAC0F,IACpB,CAASpC,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG0F,UAAU,CAACxF,MAA/B,CAAuCF,CAAC,EAAxC,CACsB,CAAhB,CAAA0F,UAAU,CAAC1F,CAAD,CADhB,GAEIsI,KAAK,GAFT,CAGIK,GAAG,CAACC,YAAJ,CAAiB3K,UAAU,CAACoG,QAAX,CAAoBrE,CAApB,EAAuBkI,KAAxC,CAHJ,CAIIzI,GAAG,CAACqE,GAAJ,CAAQ6E,GAAG,CAAClJ,GAAJ,CAAQ8I,cAAR,CAAuB7C,UAAU,CAAC1F,CAAD,CAAjC,CAAR,CAJJ,CAKIT,GAAG,CAACuE,GAAJ,CAAQ6E,GAAG,CAACpJ,GAAJ,CAAQgJ,cAAR,CAAuB7C,UAAU,CAAC1F,CAAD,CAAjC,CAAR,CALJ,EAQIsI,KAZ+C,EAajD,KAAKnG,iBAAL,CAAuB0G,GAAvB,CAA2BpJ,GAA3B,CAAgCF,GAAhC,CACH,CACI+I,KArB6B,EAsBhC,KAAKnG,iBAAL,CAAuBuF,sBAAvB,CACE,KAAKpK,KAAL,CAAWD,QAAX,CAAoBY,UAApB,CAA+BoG,QADjC,CAtBgC,CAyBlC,KAAK/G,KAAL,CAAWwL,iBAAX,EAzBkC,CA0BlC,KAAK3G,iBAAL,CAAuBqG,YAAvB,CAAoC,KAAKlL,KAAL,CAAWmL,WAA/C,CA1BkC,CA2BlC,KAAKvG,yBAAL,GACD,CACD,MAAO,MAAKC,iBACb,CAEF,C,CAKDtF,UAAU,CAACiE,SAAX,CAAqByG,OAArB,CAA+B,UAAW,CACpC,KAAKjK,KAAL,EAAc,KAAKA,KAAL,CAAWD,QADW,EAEtC,KAAKC,KAAL,CAAWD,QAAX,CAAoBkK,OAApB,EAFsC,CAGpC,KAAKjK,KAAL,EAAc,KAAKA,KAAL,CAAWI,QAHW,EAItC,KAAKJ,KAAL,CAAWI,QAAX,CAAoB6J,OAApB,EAJsC,CAKpC,KAAKlG,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QALL,EAMtC,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4B6J,OAA5B,EANsC,CAOpC,KAAKlK,QAP+B,EAQtC,KAAKA,QAAL,CAAckK,OAAd,EARsC,CASxC,KAAK5F,cAAL,OATwC,CAUxC,KAAKD,KAAL,OAVwC,CAWxC,KAAKpE,KAAL,OAXwC,CAYxC,KAAKuE,UAAL,OAZwC,CAaxC,KAAKP,SAAL,OACD,C,CAKDzE,UAAU,CAACiE,SAAX,CAAqBiI,YAArB,CAAoC,SAASC,aAAT,CAAwB5L,OAAxB,CAAiC,CACnE,KAAK,IAAA4L,aAAD,EACD5L,OAAO,EAAIA,OAAO,CAAC6L,cADtB,EAyBM,KAAKlH,MAAL,EAAe,KAAKA,MAAL,CAAYmH,SAAZ,EAzBrB,GA0BI,KAAKnH,MAAL,CAAYoH,OAAZ,EA1BJ,CA2BI,KAAK7L,KAAL,CAAW0G,MAAX,CAAkB,KAAKjC,MAAL,CAAYzE,KAA9B,CA3BJ,EA6BE,KAAK0E,oBAAL,GA7BF,KAGE,IAAI,KAAKV,SAAT,CAAoB,CAKlB,GAJK,KAAKS,MAIV,GAHE,KAAKA,MAAL,CAAc,IAAK9G,mBAAO,CAAC,CAAD,CAAP,CAAoBmO,MAAzB,EAAiC,IAAjC,CAGhB,CAFE,KAAKpH,oBAAL,GAEF,EAAI,KAAKA,oBAAT,CAA+B,CAC7B,GAAIqC,SAAQ,CAAG,KAAK+D,gBAAL,IAAf,CACI/D,QAFyB,GAG3B,KAAKtC,MAAL,CAAYsH,WAAZ,CAAwBhF,QAAQ,CAACzE,CAAjC,CAAoCyE,QAAQ,CAACxE,CAA7C,CAAgDwE,QAAQ,CAACiF,CAAzD,CAH2B,CAI3B,KAAKtH,oBAAL,GAJ2B,CAM9B,CACG5E,OAAO,EAAIA,OAAO,CAACmM,MAAnB,EAA6BnM,OAAO,CAACoM,YAZvB,EAahBpM,OAAO,CAACoM,YAAR,CAAqB9I,IAArB,CACE,KAAKqB,MAAL,CAAY0H,SAAZ,CAAsBrM,OAAO,CAACmM,MAAR,CAAeG,YAArC,CADF,CAbgB,CAgBb,KAAK3H,MAAL,CAAYmH,SAAZ,EAhBa,GAiBhB,KAAKnH,MAAL,CAAY4H,MAAZ,EAjBgB,CAkBhB,KAAKrM,KAAL,CAAWwG,GAAX,CAAe,KAAK/B,MAAL,CAAYzE,KAA3B,CAlBgB,CAoBnB,CAQJ,C,CAEDT,UAAU,CAACiE,SAAX,CAAqB8I,mBAArB,CAA2C,SAASnK,GAAT,CAAcF,GAAd,CAAmB,CACxD,KAAKwC,MAAL,EAAe,KAAKA,MAAL,CAAYmH,SAAZ,EADyC,EAE1D,KAAKnH,MAAL,CAAY8H,YAAZ,CAAyBpK,GAAzB,CAA8BF,GAA9B,CAEH,C,CAED1C,UAAU,CAACiE,SAAX,CAAqBgJ,kBAArB,CAA0C,UAAW,CAC1B,CAApB,OAAKtI,WAAN,EAAqD,WAAzB,QAAO,MAAKnE,QAAxC,GACE,KAAKC,KAAL,CAAWI,QAAX,CAAoBc,YAApB,EAAoC9B,KAAK,CAAC+B,YAA3C,EACA,SAAKnB,KAAL,CAAWI,QAAX,CAAoBc,YAFrB,CAD+C,EAI7C+G,yBAAyB,CAAC,KAAKlI,QAAN,CAAgB,KAAKC,KAArB,CAEhC,C,CAEDT,UAAU,CAACiE,SAAX,CAAqBiJ,cAArB,CAAsC,SAASrG,WAAT,CAAsB,CACtD,KAAKpG,KAAL,EAAeoG,WAAW,SAD4B,GAExD,KAAKpG,KAAL,CAAWoG,WAAX,CAAyBA,WAF+B,CAGpD,KAAKrC,aAH+C,GAItD,KAAKA,aAAL,CAAmBqC,WAAnB,CAAiC,KAAKpG,KAAL,CAAWoG,WAAX,CAAyB,CAJJ,EAM3D,C,CAOD7G,UAAU,CAACiE,SAAX,CAAqBkJ,gCAArB,CAAwD,SAASC,KAAT,CAAgB,CACtE,GAAIA,KAAK,EAAIA,KAAK,CAACV,MAAnB,CAA2B,IACrBW,OAAM,GADe,CAEnB7F,QAAQ,CAAG,KAAK+D,gBAAL,IAFQ,CASzB,MANA/D,SAAQ,CAAC8F,OAAT,CAAiBF,KAAK,CAACV,MAAvB,CAMA,CALAlF,QAAQ,CAACiF,CAAT,CAAac,IAAI,CAAC3K,GAAL,CAAS2K,IAAI,CAAC7K,GAAL,CAAS8E,QAAQ,CAACiF,CAAlB,CAAqB,CAArB,CAAT,CAAkC,CAAlC,CAKb,EAJiB,CAAb,CAAAjF,QAAQ,CAACzE,CAAT,EAA+B,CAAC,CAAd,CAAAyE,QAAQ,CAACzE,CAA3B,EAAkD,CAAb,CAAAyE,QAAQ,CAACxE,CAA9C,EAAoE,CAAC,CAAd,CAAAwE,QAAQ,CAACxE,CAIpE,IAHEqK,MAAM,GAGR,EADAD,KAAK,CAACI,qBAAN,GAA8BC,wBAA9B,CAAuDjG,QAAQ,CAACzE,CAAhE,CAAmEyE,QAAQ,CAACxE,CAA5E,CAA+EwE,QAA/E,CACA,CAAO,CAACA,QAAD,CAAW6F,MAAX,CACR,CAGF,C,CAGDrN,UAAU,CAACiE,SAAX,CAAqByJ,MAArB,CAA8B,SAASC,KAAT,CAAgBxB,aAAhB,CAA+B5L,OAA/B,CAAwC,CACpE,GAAI,IAAA4L,aAAJ,CACA,CACE,GAAK,KAAKnH,UAAN,EAAqB,KAAKsE,aAAL,EAAzB,CACE,KAAKzE,KAAL,CAAW0E,MAAX,CAAmBoE,KAAnB,CADF,KAGK,CACH,GAAIC,WAAU,CAAG,KAAKhJ,WAAL,CAAmB+I,KAApC,CACIC,UAAU,CAAG,KAAK7I,QAFnB,GAGD6I,UAHC,EAGyB,KAAK7I,QAH9B,EAIH,KAAKH,WAAL,CAAmBgJ,UACpB,CACY,CAAT,EAAAD,KAVN,GAWI,KAAKtI,yBAAL,GAXJ,CAY6B,CAApB,OAAKV,WAAN,EAAqD,WAAzB,QAAO,MAAKnE,QAAxC,GACC,KAAKC,KAAL,CAAWI,QAAX,CAAoBc,YAApB,EAAoC9B,KAAK,CAAC+B,YAA3C,EACA,SAAKnB,KAAL,CAAWI,QAAX,CAAoBc,YAFpB,CAZR,EAeM+G,yBAAyB,CAAC,KAAKlI,QAAN,CAAgB,KAAKC,KAArB,CAf/B,CAiBC,CACD,KAAKyL,YAAL,CAAkBC,aAAlB,CAAiC5L,OAAjC,CACD,C,CAEDR,OAAO,CAACC,UAAR,CAAqBA,U;;;;;;;AC/pBrB;AAAA;AAAA;AAAA;AAAA;GAgBM6N,IAAG,CAAG,GAAIC,8C,CACVC,IAAI,CAAG,GAAIC,+C,CACXC,OAAO,CAAG,GAAIxI,8C,CAEpB,QAAS/G,SAAT,EAAoB,CAyBnB;AAvBA,KAAKmH,IAAL,CAAYqI,+CAAS,CAACC,YAAV,EAFO,CAInB,KAAKrH,IAAL,CAAY,EAJO,CAKnB,KAAKsH,IAAL,CAAY,UALO,CAOnB,KAAK7K,QAAL,CAAgB,EAPG,CAQnB,KAAK8K,MAAL,CAAc,EARK,CASnB,KAAKjL,KAAL,CAAa,EATM,CAUnB,KAAKF,aAAL,CAAqB,CAAC,EAAD,CAVF,CAWlB,KAAKoL,OAAL,CAAe,EAXG,CAYlB,KAAKC,GAAL,CAAW,EAZO,CAcnB,KAAKxN,YAAL,CAAoB,EAdD,CAenB,KAAKG,YAAL,CAAoB,EAfD,CAiBnB,KAAKsN,WAAL,CAAmB,EAjBA,CAkBnB,KAAKC,WAAL,CAAmB,EAlBA,CAoBnB,KAAKC,aAAL,CAAqB,EApBF,CAsBnB,KAAK/L,WAAL,CAAmB,IAtBA,CAuBnB,KAAKgM,cAAL,CAAsB,IAvBH,CA2BnB,KAAKC,kBAAL,GA3BmB,CA4BnB,KAAKC,kBAAL,GA5BmB,CA6BnB,KAAK/K,aAAL,GA7BmB,CA8BnB,KAAKgL,iBAAL,GA9BmB,CA+BnB,KAAKtI,gBAAL,GA/BmB,CAgCnB,KAAKuI,uBAAL,GAhCmB,CAiCnB,KAAKC,gBAAL,GAjCmB,CAkCnB,KAAK7I,iBAAL,GAEA,CAEDzH,QAAQ,CAACuF,SAAT,CAAqBC,MAAM,CAAC+K,MAAP,CAAe/K,MAAM,CAACC,MAAP,CAAe+K,qDAAe,CAACjL,SAA/B,CAAf,CAA2D,CAE/EkL,WAAW,CAAEzQ,QAFkE,CAI/EyB,UAAU,GAJqE,CAM/EwL,YAAY,CAAE,sBAAWyD,MAAX,CAAoB,CAIjC,OAEOC,OAFP,CAFMC,YAAY,CAAG,GAAIC,8CAAJ,GAAcC,eAAd,CAA+BJ,MAA/B,CAErB,CAAUjM,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAG,KAAKlM,QAAL,CAAcF,MAApC,CAA4CF,CAAC,CAAGsM,EAAhD,CAAoDtM,CAAC,EAArD,CAEOkM,MAFP,CAEgB,KAAK9L,QAAL,CAAeJ,CAAf,CAFhB,CAGCkM,MAAM,CAAC1D,YAAP,CAAqByD,MAArB,CAHD,CAOA,IAAM,GAECM,KAFD,CAAIvM,EAAC,CAAG,CAAR,CAAWsM,GAAE,CAAG,KAAKrM,KAAL,CAAWC,MAAjC,CAAyCF,EAAC,CAAGsM,GAA7C,CAAiDtM,EAAC,EAAlD,CAAwD,CAEjDuM,IAFiD,CAE1C,KAAKtM,KAAL,CAAYD,EAAZ,CAF0C,CAGvDuM,IAAI,CAACjI,MAAL,CAAYkI,YAAZ,CAA0BL,YAA1B,EAAyCM,SAAzC,EAHuD,CAKvD,IAAM,GAAIC,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAGJ,IAAI,CAACK,aAAL,CAAmB1M,MAAzC,CAAiDwM,CAAC,CAAGC,EAArD,CAAyDD,CAAC,EAA1D,CAECH,IAAI,CAACK,aAAL,CAAoBF,CAApB,EAAwBF,YAAxB,CAAsCL,YAAtC,EAAqDM,SAArD,EAID,CAiBD,MAf0B,KAArB,QAAKjN,WAeV,EAbC,KAAKF,kBAAL,EAaD,CAT6B,IAAxB,QAAKkM,cASV,EAPC,KAAKlI,qBAAL,EAOD,CAHA,KAAKoI,kBAAL,GAGA,CAFA,KAAKC,iBAAL,GAEA,CAAO,IAEP,CA/C8E,CAiD/EkB,OAAO,CAAE,iBAAWC,KAAX,CAAmB,CAQ3B,MAJApC,IAAG,CAACqC,aAAJ,CAAmBD,KAAnB,CAIA,CAFA,KAAKtE,YAAL,CAAmBkC,GAAnB,CAEA,CAAO,IAEP,CA3D8E,CA6D/EsC,OAAO,CAAE,iBAAWF,KAAX,CAAmB,CAQ3B,MAJApC,IAAG,CAACuC,aAAJ,CAAmBH,KAAnB,CAIA,CAFA,KAAKtE,YAAL,CAAmBkC,GAAnB,CAEA,CAAO,IAEP,CAvE8E,CAyE/EwC,OAAO,CAAE,iBAAWJ,KAAX,CAAmB,CAQ3B,MAJApC,IAAG,CAACyC,aAAJ,CAAmBL,KAAnB,CAIA,CAFA,KAAKtE,YAAL,CAAmBkC,GAAnB,CAEA,CAAO,IAEP,CAnF8E,CAqF/E0C,SAAS,CAAE,mBAAWxN,CAAX,CAAcC,CAAd,CAAiByJ,CAAjB,CAAqB,CAQ/B,MAJAoB,IAAG,CAAC2C,eAAJ,CAAqBzN,CAArB,CAAwBC,CAAxB,CAA2ByJ,CAA3B,CAIA,CAFA,KAAKd,YAAL,CAAmBkC,GAAnB,CAEA,CAAO,IAEP,CA/F8E,CAiG/E4C,KAAK,CAAE,eAAW1N,CAAX,CAAcC,CAAd,CAAiByJ,CAAjB,CAAqB,CAQ3B,MAJAoB,IAAG,CAAC6C,SAAJ,CAAe3N,CAAf,CAAkBC,CAAlB,CAAqByJ,CAArB,CAIA,CAFA,KAAKd,YAAL,CAAmBkC,GAAnB,CAEA,CAAO,IAEP,CA3G8E,CA6G/E8C,MAAM,CAAE,gBAAWC,MAAX,CAAoB,CAQ3B,MANA7C,KAAI,CAAC4C,MAAL,CAAaC,MAAb,CAMA,CAJA7C,IAAI,CAAC8C,YAAL,EAIA,CAFA,KAAKlF,YAAL,CAAmBoC,IAAI,CAACqB,MAAxB,CAEA,CAAO,IAEP,CAvH8E,CAyH/E0B,kBAAkB,CAAE,4BAAWtQ,QAAX,CAAsB,CAkCzC,QAASuQ,QAAT,CAAkBvN,CAAlB,CAAqBE,CAArB,CAAwBE,CAAxB,CAA2BoN,aAA3B,CAA2C,IAEpCrP,aAAY,CAAK,SAAAN,KAAF,CAA0B,EAA1B,CAA+B,CACnD4P,KAAK,CAAC5C,MAAN,CAAc7K,CAAd,EAAkB+C,KAAlB,EADmD,CAEnD0K,KAAK,CAAC5C,MAAN,CAAc3K,CAAd,EAAkB6C,KAAlB,EAFmD,CAGnD0K,KAAK,CAAC5C,MAAN,CAAczK,CAAd,EAAkB2C,KAAlB,EAHmD,CAFV,CAQpCwJ,aAAa,CAAK,SAAAtI,MAAF,CAA2B,EAA3B,CAAgC,CACrD,GAAIhC,8CAAJ,GAAcyL,mBAAd,CAAmCzJ,MAAnC,CAA2CjE,CAA3C,CADqD,CAErD,GAAIiC,8CAAJ,GAAcyL,mBAAd,CAAmCzJ,MAAnC,CAA2C/D,CAA3C,CAFqD,CAGrD,GAAI+B,8CAAJ,GAAcyL,mBAAd,CAAmCzJ,MAAnC,CAA2C7D,CAA3C,CAHqD,CARZ,CAcpC8L,IAAI,CAAG,GAAIyB,MAAJ,CAAW3N,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAoBmM,aAApB,CAAmCpO,YAAnC,CAAiDqP,aAAjD,CAd6B,CAgB1CC,KAAK,CAAC7N,KAAN,CAAYS,IAAZ,CAAkB6L,IAAlB,CAhB0C,CAkBrC,SAAA0B,EAlBqC,EAoBzCH,KAAK,CAAC/N,aAAN,CAAqB,CAArB,EAAyBW,IAAzB,CAA+B,CAC9B,GAAIf,8CAAJ,GAAcoO,mBAAd,CAAmCE,EAAnC,CAAuC5N,CAAvC,CAD8B,CAE9B,GAAIV,8CAAJ,GAAcoO,mBAAd,CAAmCE,EAAnC,CAAuC1N,CAAvC,CAF8B,CAG9B,GAAIZ,8CAAJ,GAAcoO,mBAAd,CAAmCE,EAAnC,CAAuCxN,CAAvC,CAH8B,CAA/B,CApByC,CA4BrC,SAAAyN,GA5BqC,EA8BzCJ,KAAK,CAAC/N,aAAN,CAAqB,CAArB,EAAyBW,IAAzB,CAA+B,CAC9B,GAAIf,8CAAJ,GAAcoO,mBAAd,CAAmCG,GAAnC,CAAwC7N,CAAxC,CAD8B,CAE9B,GAAIV,8CAAJ,GAAcoO,mBAAd,CAAmCG,GAAnC,CAAwC3N,CAAxC,CAF8B,CAG9B,GAAIZ,8CAAJ,GAAcoO,mBAAd,CAAmCG,GAAnC,CAAwCzN,CAAxC,CAH8B,CAA/B,CAQD,CAxEwC,GAEnCqN,MAAK,CAAG,IAF2B,CAInCK,KAAK,CAAsB,IAAnB,GAAA9Q,QAAQ,CAAC8Q,KAAT,QAA0B9Q,QAAQ,CAAC8Q,KAJR,CAKnClQ,UAAU,CAAGZ,QAAQ,CAACY,UALa,CAOzC,GAAK,SAAAA,UAAU,CAACoG,QAAhB,CAGC,MADA+J,QAAO,CAACC,KAAR,CAAe,kFAAf,CACA,CAAO,IAAP,CAVwC,GAcnChK,SAAQ,CAAGpG,UAAU,CAACoG,QAda,CAenCC,MAAM,CAAGrG,UAAU,CAACqG,MAfe,CAgBnCpG,KAAK,CAAGD,UAAU,CAACC,KAhBgB,CAiBnC+P,EAAE,CAAGhQ,UAAU,CAACgQ,EAjBmB,CAkBnCC,GAAG,CAAGjQ,UAAU,CAACiQ,GAlBkB,CAoBpC,SAAAA,GApBoC,GAoBhB,KAAKnO,aAAL,CAAoB,CAApB,EAA0B,EApBV,EAsBzC,IAAM,GAAIC,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGqE,QAAQ,CAAC2D,KAA9B,CAAqChI,CAAC,EAAtC,CAEC8N,KAAK,CAAC1N,QAAN,CAAeM,IAAf,CAAqB,GAAI4B,8CAAJ,GAAcyL,mBAAd,CAAmC1J,QAAnC,CAA6CrE,CAA7C,CAArB,CAFD,CAIM,SAAA9B,KAJN,EAME4P,KAAK,CAAC5C,MAAN,CAAaxK,IAAb,CAAmB,GAAI1B,4CAAJ,GAAY+O,mBAAZ,CAAiC7P,KAAjC,CAAwC8B,CAAxC,CAAnB,CANF,CAoDA,GAAMsO,OAAM,CAAGjR,QAAQ,CAACiR,MAAxB,CAEA,GAAqB,CAAhB,CAAAA,MAAM,CAACpO,MAAZ,CAEC,IAAM,GAAIF,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAGsO,MAAM,CAACpO,MAA5B,CAAoCF,GAAC,EAArC,CAOC,OALMuO,MAAK,CAAGD,MAAM,CAAEtO,GAAF,CAKpB,CAHMwO,KAAK,CAAGD,KAAK,CAACC,KAGpB,CAFMxG,KAAK,CAAGuG,KAAK,CAACvG,KAEpB,CAAU0E,CAAC,CAAG8B,KAAd,CAAyC9B,CAAC,CAAhB8B,KAAK,CAAGxG,KAAlC,CAAiD0E,CAAC,EAAI,CAAtD,CAEM,SAAAyB,KAFN,CAQEP,OAAO,CAAElB,CAAF,CAAKA,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAG,CAAhB,CAAmB6B,KAAK,CAACV,aAAzB,CART,CAIED,OAAO,CAAEO,KAAK,CAACM,IAAN,CAAY/B,CAAZ,CAAF,CAAmByB,KAAK,CAACM,IAAN,CAAY/B,CAAC,CAAG,CAAhB,CAAnB,CAAwCyB,KAAK,CAACM,IAAN,CAAY/B,CAAC,CAAG,CAAhB,CAAxC,CAA6D6B,KAAK,CAACV,aAAnE,CAJT,CATF,IA2BC,IAAK,SAAAM,KAAL,CAEC,IAAM,GAAInO,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAGmO,KAAK,CAACnG,KAA3B,CAAkChI,GAAC,EAAI,CAAvC,CAEC4N,OAAO,CAAEO,KAAK,CAACM,IAAN,CAAYzO,GAAZ,CAAF,CAAmBmO,KAAK,CAACM,IAAN,CAAYzO,GAAC,CAAG,CAAhB,CAAnB,CAAwCmO,KAAK,CAACM,IAAN,CAAYzO,GAAC,CAAG,CAAhB,CAAxC,CAAP,CAJF,IAUC,KAAM,GAAIA,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAGqE,QAAQ,CAAC2D,KAA9B,CAAqChI,GAAC,EAAI,CAA1C,CAEC4N,OAAO,CAAE5N,GAAF,CAAKA,GAAC,CAAG,CAAT,CAAYA,GAAC,CAAG,CAAhB,CAAP,CAsBH,MAdA,MAAK0O,kBAAL,EAcA,CAZ8B,IAAzB,GAAArR,QAAQ,CAACmC,WAYd,GAVC,KAAKA,WAAL,CAAmBnC,QAAQ,CAACmC,WAAT,CAAqB4D,KAArB,EAUpB,EANiC,IAA5B,GAAA/F,QAAQ,CAACmO,cAMd,GAJC,KAAKA,cAAL,CAAsBnO,QAAQ,CAACmO,cAAT,CAAwBpI,KAAxB,EAIvB,EAAO,IAEP,CApQ8E,CAsQ/EuE,MAAM,CAAE,iBAAY,CAQnB,MANA,MAAKrI,kBAAL,EAMA,CAJA,KAAKE,WAAL,CAAiBoI,SAAjB,CAA4BkD,OAA5B,EAAsC6D,MAAtC,EAIA,CAFA,KAAKvB,SAAL,CAAgBtC,OAAO,CAAClL,CAAxB,CAA2BkL,OAAO,CAACjL,CAAnC,CAAsCiL,OAAO,CAACxB,CAA9C,CAEA,CAAO,IAEP,CAhR8E,CAkR/EmD,SAAS,CAAE,oBAAY,CAEtB,KAAKnJ,qBAAL,EAFsB,IAIhBqE,OAAM,CAAG,KAAK6D,cAAL,CAAoB7D,MAJb,CAKhBiH,MAAM,CAAG,KAAKpD,cAAL,CAAoBoD,MALb,CAOhBC,CAAC,CAAc,CAAX,GAAAD,MAAM,CAAS,CAAT,CAAa,EAAMA,MAPb,CAShB3C,MAAM,CAAG,GAAItB,8CATG,CAmBtB,MATAsB,OAAM,CAACpD,GAAP,CACCgG,CADD,CACI,CADJ,CACO,CADP,CACU,CAAEA,CAAF,CAAMlH,MAAM,CAAC/H,CADvB,CAEC,CAFD,CAEIiP,CAFJ,CAEO,CAFP,CAEU,CAAEA,CAAF,CAAMlH,MAAM,CAAC9H,CAFvB,CAGC,CAHD,CAGI,CAHJ,CAGOgP,CAHP,CAGU,CAAEA,CAAF,CAAMlH,MAAM,CAAC2B,CAHvB,CAIC,CAJD,CAII,CAJJ,CAIO,CAJP,CAIU,CAJV,CASA,CAFA,KAAKd,YAAL,CAAmByD,MAAnB,CAEA,CAAO,IAEP,CAvS8E,CAyS/EyC,kBAAkB,CAAE,6BAAY,CAI/B,OAFMI,GAAE,CAAG,GAAIxM,8CAEf,CAF0ByM,EAAE,CAAG,GAAIzM,8CAEnC,CAAU0M,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,CAAC,CAAGC,EAA7C,CAAiDD,CAAC,EAAlD,CAAwD,IAEjDzC,KAAI,CAAG,KAAKtM,KAAL,CAAY+O,CAAZ,CAF0C,CAIjDE,EAAE,CAAG,KAAK9O,QAAL,CAAemM,IAAI,CAAClM,CAApB,CAJ4C,CAKjD8O,EAAE,CAAG,KAAK/O,QAAL,CAAemM,IAAI,CAAChM,CAApB,CAL4C,CAMjD6O,EAAE,CAAG,KAAKhP,QAAL,CAAemM,IAAI,CAAC9L,CAApB,CAN4C,CAQvDqO,EAAE,CAACO,UAAH,CAAeD,EAAf,CAAmBD,EAAnB,CARuD,CASvDJ,EAAE,CAACM,UAAH,CAAeH,EAAf,CAAmBC,EAAnB,CATuD,CAUvDL,EAAE,CAACQ,KAAH,CAAUP,EAAV,CAVuD,CAYvDD,EAAE,CAACrC,SAAH,EAZuD,CAcvDF,IAAI,CAACjI,MAAL,CAAYiL,IAAZ,CAAkBT,EAAlB,CAEA,CAED,CA/T8E,CAiU/EU,oBAAoB,CAAE,+BAAiC,CAItD,OAJgCC,aAIhC,4DAFMrP,QAAQ,CAAOsP,KAAP,CAAc,KAAKtP,QAAL,CAAcF,MAA5B,CAEd,CAAUyP,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAG,KAAKxP,QAAL,CAAcF,MAApC,CAA4CyP,CAAC,CAAGC,EAAhD,CAAoDD,CAAC,EAArD,CAECvP,QAAQ,CAAEuP,CAAF,CAAR,CAAgB,GAAIrN,8CAApB,CAID,GAAKmN,YAAL,CAEC;AACA;AAIA,OAFMX,GAAE,CAAG,GAAIxM,8CAEf,CAF0ByM,EAAE,CAAG,GAAIzM,8CAEnC,CAAU0M,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,CAAC,CAAGC,EAA7C,CAAiDD,CAAC,EAAlD,CAAwD,IAEjDzC,KAAI,CAAG,KAAKtM,KAAL,CAAY+O,CAAZ,CAF0C,CAIjDE,EAAE,CAAG,KAAK9O,QAAL,CAAemM,IAAI,CAAClM,CAApB,CAJ4C,CAKjD8O,EAAE,CAAG,KAAK/O,QAAL,CAAemM,IAAI,CAAChM,CAApB,CAL4C,CAMjD6O,EAAE,CAAG,KAAKhP,QAAL,CAAemM,IAAI,CAAC9L,CAApB,CAN4C,CAQvDqO,EAAE,CAACO,UAAH,CAAeD,EAAf,CAAmBD,EAAnB,CARuD,CASvDJ,EAAE,CAACM,UAAH,CAAeH,EAAf,CAAmBC,EAAnB,CATuD,CAUvDL,EAAE,CAACQ,KAAH,CAAUP,EAAV,CAVuD,CAYvD3O,QAAQ,CAAEmM,IAAI,CAAClM,CAAP,CAAR,CAAmByD,GAAnB,CAAwBgL,EAAxB,CAZuD,CAavD1O,QAAQ,CAAEmM,IAAI,CAAChM,CAAP,CAAR,CAAmBuD,GAAnB,CAAwBgL,EAAxB,CAbuD,CAcvD1O,QAAQ,CAAEmM,IAAI,CAAC9L,CAAP,CAAR,CAAmBqD,GAAnB,CAAwBgL,EAAxB,CAEA,CAvBF,IAyBO,CAEN,KAAKJ,kBAAL,EAFM,CAIN,IAAM,GAECnC,MAFD,CAAIyC,EAAC,CAAG,CAAR,CAAWC,GAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,EAAC,CAAGC,GAA7C,CAAiDD,EAAC,EAAlD,CAEOzC,KAFP,CAEc,KAAKtM,KAAL,CAAY+O,EAAZ,CAFd,CAIC5O,QAAQ,CAAEmM,KAAI,CAAClM,CAAP,CAAR,CAAmByD,GAAnB,CAAwByI,KAAI,CAACjI,MAA7B,CAJD,CAKClE,QAAQ,CAAEmM,KAAI,CAAChM,CAAP,CAAR,CAAmBuD,GAAnB,CAAwByI,KAAI,CAACjI,MAA7B,CALD,CAMClE,QAAQ,CAAEmM,KAAI,CAAC9L,CAAP,CAAR,CAAmBqD,GAAnB,CAAwByI,KAAI,CAACjI,MAA7B,CAID,CAED,IAAM,GAAIqL,GAAC,CAAG,CAAR,CAAWC,GAAE,CAAG,KAAKxP,QAAL,CAAcF,MAApC,CAA4CyP,EAAC,CAAGC,GAAhD,CAAoDD,EAAC,EAArD,CAECvP,QAAQ,CAAEuP,EAAF,CAAR,CAAclD,SAAd,GAID,IAAM,GAAIuC,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,GAAC,CAAGC,IAA7C,CAAiDD,GAAC,EAAlD,CAAwD,IAEjDzC,OAAI,CAAG,KAAKtM,KAAL,CAAY+O,GAAZ,CAF0C,CAIjDpC,aAAa,CAAGL,MAAI,CAACK,aAJ4B,CAMzB,CAAzB,GAAAA,aAAa,CAAC1M,MANoC,EAQtD0M,aAAa,CAAE,CAAF,CAAb,CAAmB2C,IAAnB,CAAyBnP,QAAQ,CAAEmM,MAAI,CAAClM,CAAP,CAAjC,CARsD,CAStDuM,aAAa,CAAE,CAAF,CAAb,CAAmB2C,IAAnB,CAAyBnP,QAAQ,CAAEmM,MAAI,CAAChM,CAAP,CAAjC,CATsD,CAUtDqM,aAAa,CAAE,CAAF,CAAb,CAAmB2C,IAAnB,CAAyBnP,QAAQ,CAAEmM,MAAI,CAAC9L,CAAP,CAAjC,CAVsD,GActDmM,aAAa,CAAE,CAAF,CAAb,CAAqBxM,QAAQ,CAAEmM,MAAI,CAAClM,CAAP,CAAR,CAAmB+C,KAAnB,EAdiC,CAgBtDwJ,aAAa,CAAE,CAAF,CAAb,CAAqBxM,QAAQ,CAAEmM,MAAI,CAAChM,CAAP,CAAR,CAAmB6C,KAAnB,EAhBiC,CAiBtDwJ,aAAa,CAAE,CAAF,CAAb,CAAqBxM,QAAQ,CAAEmM,MAAI,CAAC9L,CAAP,CAAR,CAAmB2C,KAAnB,EAjBiC,CAqBvD,CAQC,MANuB,EAApB,MAAKnD,KAAL,CAAWC,MAMd,GAJD,KAAKyL,iBAAL,GAIC,EAAOvL,QAET,CAzZ8E,CA2Z/EyP,wBAAwB,CAAE,mCAAY,CAErC,KAAKnB,kBAAL,EAFqC,CAIrC,IAAM,GAAIM,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,CAAC,CAAGC,EAA7C,CAAiDD,CAAC,EAAlD,CAAwD,IAEjDzC,KAAI,CAAG,KAAKtM,KAAL,CAAY+O,CAAZ,CAF0C,CAIjDpC,aAAa,CAAGL,IAAI,CAACK,aAJ4B,CAMzB,CAAzB,GAAAA,aAAa,CAAC1M,MANoC,EAQtD0M,aAAa,CAAE,CAAF,CAAb,CAAmB2C,IAAnB,CAAyBhD,IAAI,CAACjI,MAA9B,CARsD,CAStDsI,aAAa,CAAE,CAAF,CAAb,CAAmB2C,IAAnB,CAAyBhD,IAAI,CAACjI,MAA9B,CATsD,CAUtDsI,aAAa,CAAE,CAAF,CAAb,CAAmB2C,IAAnB,CAAyBhD,IAAI,CAACjI,MAA9B,CAVsD,GActDsI,aAAa,CAAE,CAAF,CAAb,CAAqBL,IAAI,CAACjI,MAAL,CAAYlB,KAAZ,EAdiC,CAetDwJ,aAAa,CAAE,CAAF,CAAb,CAAqBL,IAAI,CAACjI,MAAL,CAAYlB,KAAZ,EAfiC,CAgBtDwJ,aAAa,CAAE,CAAF,CAAb,CAAqBL,IAAI,CAACjI,MAAL,CAAYlB,KAAZ,EAhBiC,CAoBvD,CAEwB,CAApB,MAAKnD,KAAL,CAAWC,MA1BqB,GA4BpC,KAAKyL,iBAAL,GA5BoC,CAgCrC,CA3b8E,CA6b/E1I,mBAAmB,CAAE,8BAAY,CAEhC;AACA;AACA;AAEA,IAAM,GAECsJ,KAFD,CAAIyC,CAAC,CAAG,CAAR,CAAWC,EAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,CAAC,CAAGC,EAA7C,CAAiDD,CAAC,EAAlD,CAAwD,CAEjDzC,IAFiD,CAE1C,KAAKtM,KAAL,CAAY+O,CAAZ,CAF0C,CAIhDzC,IAAI,CAACuD,oBAJ2C,CAUtDvD,IAAI,CAACuD,oBAAL,CAA0BP,IAA1B,CAAgChD,IAAI,CAACjI,MAArC,CAVsD,CAMtDiI,IAAI,CAACuD,oBAAL,CAA4BvD,IAAI,CAACjI,MAAL,CAAYlB,KAAZ,EAN0B,CAchDmJ,IAAI,CAACwD,uBAd2C,GAcjBxD,IAAI,CAACwD,uBAAL,CAA+B,EAdd,EAgBvD,IAAM,GAAI/P,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAGC,IAAI,CAACK,aAAL,CAAmB1M,MAAzC,CAAiDF,CAAC,CAAGsM,EAArD,CAAyDtM,CAAC,EAA1D,CAEQuM,IAAI,CAACwD,uBAAL,CAA8B/P,CAA9B,CAFR,CAQEuM,IAAI,CAACwD,uBAAL,CAA8B/P,CAA9B,EAAkCuP,IAAlC,CAAwChD,IAAI,CAACK,aAAL,CAAoB5M,CAApB,CAAxC,CARF,CAIEuM,IAAI,CAACwD,uBAAL,CAA8B/P,CAA9B,EAAoCuM,IAAI,CAACK,aAAL,CAAoB5M,CAApB,EAAwBoD,KAAxB,EAUtC,CAED;AAEA,GAAM4M,OAAM,CAAG,GAAIzU,SAAnB,CACAyU,MAAM,CAAC/P,KAAP,CAAe,KAAKA,KAzCY,CA2ChC,IAAM,GAAID,IAAC,CAAG,CAAR,CAAWsM,IAAE,CAAG,KAAK1O,YAAL,CAAkBsC,MAAxC,CAAgDF,GAAC,CAAGsM,IAApD,CAAwDtM,GAAC,EAAzD,CAA+D,CAE9D;AAEA,GAAK,CAAE,KAAKjC,YAAL,CAAmBiC,GAAnB,CAAP,CAAgC,CAE/B,KAAKjC,YAAL,CAAmBiC,GAAnB,EAAyB,EAFM,CAG/B,KAAKjC,YAAL,CAAmBiC,GAAnB,EAAuBiQ,WAAvB,CAAqC,EAHN,CAI/B,KAAKlS,YAAL,CAAmBiC,GAAnB,EAAuB4M,aAAvB,CAAuC,EAJR,CAS/B,OAHMsD,eAAc,CAAG,KAAKnS,YAAL,CAAmBiC,GAAnB,EAAuBiQ,WAG9C,CAFME,gBAAgB,CAAG,KAAKpS,YAAL,CAAmBiC,GAAnB,EAAuB4M,aAEhD,CAAUoC,GAAC,CAAG,CAAd,CAAiBC,IAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,GAAC,CAAGC,IAA7C,CAAiDD,GAAC,EAAlD,CAAwD,IAEjDoB,WAAU,CAAG,GAAI9N,8CAFgC,CAGjDsK,cAAa,CAAG,CAAEvM,CAAC,CAAE,GAAIiC,8CAAT,CAAoB/B,CAAC,CAAE,GAAI+B,8CAA3B,CAAsC7B,CAAC,CAAE,GAAI6B,8CAA7C,CAHiC,CAKvD4N,cAAc,CAACxP,IAAf,CAAqB0P,UAArB,CALuD,CAMvDD,gBAAgB,CAACzP,IAAjB,CAAuBkM,cAAvB,CAEA,CAED,CAED,GAAM7O,aAAY,CAAG,KAAKA,YAAL,CAAmBiC,GAAnB,CAArB,CAEA;AAEAgQ,MAAM,CAAC5P,QAAP,CAAkB,KAAKxC,YAAL,CAAmBoC,GAAnB,EAAuBI,QA7BqB,CAiC9D4P,MAAM,CAACtB,kBAAP,EAjC8D,CAkC9D,GAAI9B,cAAa,CAAGoD,MAAM,CAACR,oBAAP,EAApB,CAEG,GAAI5C,aAAa,EAA2B,CAAvB,CAAAA,aAAa,CAAC1M,MAAnC,CAA+C,CAC7C,KAAKtC,YAAL,CAAkBoC,GAAlB,EAAqBmL,OAArB,CAAmCuE,KAAnC,CAA0C,KAAKtP,QAAL,CAAcF,MAAxD,CAD6C,CAG7C,IAAM,GAAIyP,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG/C,aAAa,CAAC1M,MAAnC,CAA2CyP,CAAC,EAA5C,CAEE,KAAK/R,YAAL,CAAkBoC,GAAlB,EAAqBmL,OAArB,CAA8BwE,CAA9B,EAAqC/C,aAAa,CAAC+C,CAAD,CAAb,CAAiBvM,KAAjB,EAGxC,CAEJ;AAEA,IAAM,GAAI4L,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,GAAC,CAAGC,IAA7C,CAAiDD,GAAC,EAAlD,CAAwD,IAEjDzC,OAAI,CAAG,KAAKtM,KAAL,CAAY+O,GAAZ,CAF0C,CAIjDoB,WAAU,CAAGrS,YAAY,CAACkS,WAAb,CAA0BjB,GAA1B,CAJoC,CAKjDpC,eAAa,CAAG7O,YAAY,CAAC6O,aAAb,CAA4BoC,GAA5B,CALiC,CAOvDoB,WAAU,CAACb,IAAX,CAAiBhD,MAAI,CAACjI,MAAtB,CAPuD,CASvDsI,eAAa,CAACvM,CAAd,CAAgBkP,IAAhB,CAAsBhD,MAAI,CAACK,aAAL,CAAoB,CAApB,CAAtB,CATuD,CAUvDA,eAAa,CAACrM,CAAd,CAAgBgP,IAAhB,CAAsBhD,MAAI,CAACK,aAAL,CAAoB,CAApB,CAAtB,CAVuD,CAWvDA,eAAa,CAACnM,CAAd,CAAgB8O,IAAhB,CAAsBhD,MAAI,CAACK,aAAL,CAAoB,CAApB,CAAtB,CAEA,CAED,CAED;AAEA,IAAM,GAECL,OAFD,CAAIyC,GAAC,CAAG,CAAR,CAAWC,IAAE,CAAG,KAAKhP,KAAL,CAAWC,MAAjC,CAAyC8O,GAAC,CAAGC,IAA7C,CAAiDD,GAAC,EAAlD,CAEOzC,MAFP,CAEc,KAAKtM,KAAL,CAAY+O,GAAZ,CAFd,CAICzC,MAAI,CAACjI,MAAL,CAAciI,MAAI,CAACuD,oBAJpB,CAKCvD,MAAI,CAACK,aAAL,CAAqBL,MAAI,CAACwD,uBAL3B,CASE,KAAK/M,iBAAL,GAEF,CAtjB8E,CAwjB/E1D,kBAAkB,CAAE,6BAAY,CAEL,IAArB,QAAKE,WAFqB,GAI9B,KAAKA,WAAL,CAAmB,GAAI4C,2CAJO,EAQ/B,KAAK5C,WAAL,CAAiB6Q,aAAjB,CAAgC,KAAKjQ,QAArC,CAEA,CAlkB8E,CAokB/EkD,qBAAqB,CAAE,gCAAY,CAEL,IAAxB,QAAKkI,cAFwB,GAIjC,KAAKA,cAAL,CAAsB,GAAI8E,6CAJO,EAQlC,KAAK9E,cAAL,CAAoB6E,aAApB,CAAmC,KAAKjQ,QAAxC,CAEA,CA9kB8E,CAglB/EmQ,KAAK,CAAE,eAAWlT,QAAX,CAAqB4O,MAArB,CAAuD,IAA1BuE,oBAA0B,wDAAJ,CAAI,CAE7D,GAAK,EAAInT,QAAQ,EAAIA,QAAQ,CAACL,UAAzB,CAAL,CAGC,WADAoR,QAAO,CAACC,KAAR,CAAe,qEAAf,CAAsFhR,QAAtF,CACA,CAL4D,GASzD8O,aATyD,CAUvDsE,YAAY,CAAG,KAAKrQ,QAAL,CAAcF,MAV0B,CAW5DwQ,SAAS,CAAG,KAAKtQ,QAX2C,CAY5DuQ,SAAS,CAAGtT,QAAQ,CAAC+C,QAZuC,CAa5DwQ,MAAM,CAAG,KAAK3Q,KAb8C,CAc5D4Q,MAAM,CAAGxT,QAAQ,CAAC4C,KAd0C,CAe5D6Q,OAAO,CAAG,KAAK5F,MAf6C,CAgB5D6F,OAAO,CAAG1T,QAAQ,CAAC6N,MAhByC,CAkBxDe,MAAM,SAlBkD,GAoB5DE,YAAY,CAAG,GAAIC,8CAAJ,GAAcC,eAAd,CAA+BJ,MAA/B,CApB6C,EAwB7D;AAEA,IAAM,GAAIjM,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAGqE,SAAS,CAACzQ,MAAhC,CAAwCF,CAAC,CAAGsM,EAA5C,CAAgDtM,CAAC,EAAjD,CAAuD,IAEhDkM,OAAM,CAAGyE,SAAS,CAAE3Q,CAAF,CAF8B,CAIhDgR,UAAU,CAAG9E,MAAM,CAAC9I,KAAP,EAJmC,CAMjD6I,MAAM,SAN2C,EAM1B+E,UAAU,CAACxI,YAAX,CAAyByD,MAAzB,CAN0B,CAQtDyE,SAAS,CAAChQ,IAAV,CAAgBsQ,UAAhB,CAEA,CAED;AAEA,IAAM,GAAIhR,IAAC,CAAG,CAAR,CAAWsM,IAAE,CAAGyE,OAAO,CAAC7Q,MAA9B,CAAsCF,GAAC,CAAGsM,IAA1C,CAA8CtM,GAAC,EAA/C,CAEC8Q,OAAO,CAACpQ,IAAR,CAAcqQ,OAAO,CAAE/Q,GAAF,CAAP,CAAaoD,KAAb,EAAd,EAID;AAEA,IAAM,GAAIpD,IAAC,CAAG,CAAR,CAAWsM,IAAE,CAAGuE,MAAM,CAAC3Q,MAA7B,CAAqCF,GAAC,CAAGsM,IAAzC,CAA6CtM,GAAC,EAA9C,CAAoD,IAE7CuM,KAAI,CAAGsE,MAAM,CAAE7Q,GAAF,CAFgC,CAG/CsE,MAAM,OAHyC,CAGvCpG,KAAK,OAHkC,CAI7C+S,iBAAiB,CAAG1E,IAAI,CAACK,aAJoB,CAKlDsE,gBAAgB,CAAG3E,IAAI,CAAC/N,YAL0B,CAO7C2S,QAAQ,CAAG,GAAInD,MAAJ,CAAWzB,IAAI,CAAClM,CAAL,CAASoQ,YAApB,CAAkClE,IAAI,CAAChM,CAAL,CAASkQ,YAA3C,CAAyDlE,IAAI,CAAC9L,CAAL,CAASgQ,YAAlE,CAPkC,CAQnDU,QAAQ,CAAC7M,MAAT,CAAgBiL,IAAhB,CAAsBhD,IAAI,CAACjI,MAA3B,CARmD,CAU9C6H,YAAY,SAVkC,EAYlDgF,QAAQ,CAAC7M,MAAT,CAAgBkI,YAAhB,CAA8BL,YAA9B,EAA6CM,SAA7C,EAZkD,CAgBnD,IAAM,GAAIC,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAGsE,iBAAiB,CAAC/Q,MAAxC,CAAgDwM,CAAC,CAAGC,EAApD,CAAwDD,CAAC,EAAzD,CAECpI,MAAM,CAAG2M,iBAAiB,CAAEvE,CAAF,CAAjB,CAAuBtJ,KAAvB,EAFV,CAIM,SAAA+I,YAJN,EAME7H,MAAM,CAACkI,YAAP,CAAqBL,YAArB,EAAoCM,SAApC,EANF,CAUC0E,QAAQ,CAACvE,aAAT,CAAuBlM,IAAvB,CAA6B4D,MAA7B,CAVD,CAcA6M,QAAQ,CAACjT,KAAT,CAAeqR,IAAf,CAAqBhD,IAAI,CAACrO,KAA1B,CA9BmD,CAgCnD,IAAM,GAAIwO,GAAC,CAAG,CAAR,CAAWC,GAAE,CAAGuE,gBAAgB,CAAChR,MAAvC,CAA+CwM,EAAC,CAAGC,GAAnD,CAAuDD,EAAC,EAAxD,CAECxO,KAAK,CAAGgT,gBAAgB,CAAExE,EAAF,CAFzB,CAGCyE,QAAQ,CAAC3S,YAAT,CAAsBkC,IAAtB,CAA4BxC,KAAK,CAACkF,KAAN,EAA5B,CAHD,CAOA+N,QAAQ,CAACtD,aAAT,CAAyBtB,IAAI,CAACsB,aAAL,CAAqB2C,mBAvCK,CAyCnDI,MAAM,CAAClQ,IAAP,CAAayQ,QAAb,CAEA,CAED;AAEA,IAAM,GAECC,eAFD,CAAIpR,GAAC,CAAG,CAAR,CAAWsM,IAAE,CAAGjP,QAAQ,CAAC0C,aAAT,CAAuBG,MAA7C,CAAqDF,GAAC,CAAGsM,IAAzD,CAA6DtM,GAAC,EAA9D,CAAoE,CAE7DoR,cAF6D,CAE5C/T,QAAQ,CAAC0C,aAAT,CAAwBC,GAAxB,CAF4C,CAI9D,KAAKD,aAAL,CAAoBC,GAApB,UAJ8D,GAItB,KAAKD,aAAL,CAAoBC,GAApB,EAA0B,EAJJ,EAMnE,IAAM,GAAI0M,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAGyE,cAAc,CAAClR,MAArC,CAA6CwM,GAAC,CAAGC,IAAjD,CAAqDD,GAAC,EAAtD,CAA4D,CAI3D,OAFM2E,KAAI,CAAGD,cAAc,CAAE1E,GAAF,CAE3B,CAFkC4E,OAAO,CAAG,EAE5C,CAAUC,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAGH,IAAI,CAACnR,MAA3B,CAAmCqR,CAAC,CAAGC,EAAvC,CAA2CD,CAAC,EAA5C,CAECD,OAAO,CAAC5Q,IAAR,CAAc2Q,IAAI,CAAEE,CAAF,CAAJ,CAAUnO,KAAV,EAAd,EAID,KAAKrD,aAAL,CAAoBC,GAApB,EAAwBU,IAAxB,CAA8B4Q,OAA9B,CAEA,CAED,CAED,CArsB8E,CAusB/EG,SAAS,CAAE,mBAAWvS,IAAX,CAAkB,OAEnBA,KAAI,EAAIA,IAAI,CAACwS,MAFM,MASvBxS,IAAI,CAAC2F,gBATkB,EASC3F,IAAI,CAACwO,YAAL,EATD,CAW5B,KAAK6C,KAAL,CAAYrR,IAAI,CAAC7B,QAAjB,CAA2B6B,IAAI,CAAC+M,MAAhC,CAX4B,MAI3BmC,QAAO,CAACC,KAAR,CAAe,iEAAf,CAAkFnP,IAAlF,CASD,CAptB8E,CAstB/E;;;;IAMAyS,aAAa,CAAE,wBAAiC,CAO/C,OAPyBC,gBAOzB,wDAP2C,CAO3C,CALMC,WAAW,CAAG,EAKpB,CAJMC,MAAM,CAAG,EAIf,CAJmBC,OAAO,CAAG,EAI7B,CAFMC,SAAS,CAAG5H,IAAI,CAAC6H,GAAL,CAAU,EAAV,CAAcL,eAAd,CAElB,CAAU5R,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAG,KAAKlM,QAAL,CAAcF,MAApC,CAA4CF,CAAC,CAAGsM,EAAhD,CAAoDtM,CAAC,EAArD,CAA2D,IAEpD2P,EAAC,CAAG,KAAKvP,QAAL,CAAeJ,CAAf,CAFgD,CAGpDkS,GAAG,CAAG9H,IAAI,CAAC+H,KAAL,CAAYxC,CAAC,CAAC/P,CAAF,CAAMoS,SAAlB,EAAgC,GAAhC,CAAsC5H,IAAI,CAAC+H,KAAL,CAAYxC,CAAC,CAAC9P,CAAF,CAAMmS,SAAlB,CAAtC,CAAsE,GAAtE,CAA4E5H,IAAI,CAAC+H,KAAL,CAAYxC,CAAC,CAACrG,CAAF,CAAM0I,SAAlB,CAH9B,CAKrD,SAAAH,WAAW,CAAEK,GAAF,CAL0C,EAOzDL,WAAW,CAAEK,GAAF,CAAX,CAAqBlS,CAPoC,CAQzD8R,MAAM,CAACpR,IAAP,CAAa,KAAKN,QAAL,CAAeJ,CAAf,CAAb,CARyD,CASzD+R,OAAO,CAAE/R,CAAF,CAAP,CAAe8R,MAAM,CAAC5R,MAAP,CAAgB,CAT0B,EAczD6R,OAAO,CAAE/R,CAAF,CAAP,CAAe+R,OAAO,CAAEF,WAAW,CAAEK,GAAF,CAAb,CAIvB,CAGD;AACA;AAGA,OAEO3F,KAFP,CAFM6F,mBAAmB,CAAG,EAE5B,CAAUpS,GAAC,CAAG,CAAd,CAAiBsM,IAAE,CAAG,KAAKrM,KAAL,CAAWC,MAAjC,CAAyCF,GAAC,CAAGsM,IAA7C,CAAiDtM,GAAC,EAAlD,CAAwD,CAEjDuM,IAFiD,CAE1C,KAAKtM,KAAL,CAAYD,GAAZ,CAF0C,CAIvDuM,IAAI,CAAClM,CAAL,CAAS0R,OAAO,CAAExF,IAAI,CAAClM,CAAP,CAJuC,CAKvDkM,IAAI,CAAChM,CAAL,CAASwR,OAAO,CAAExF,IAAI,CAAChM,CAAP,CALuC,CAMvDgM,IAAI,CAAC9L,CAAL,CAASsR,OAAO,CAAExF,IAAI,CAAC9L,CAAP,CANuC,CAUvD;AACA;AACA,OAJM4R,QAAO,CAAG,CAAE9F,IAAI,CAAClM,CAAP,CAAUkM,IAAI,CAAChM,CAAf,CAAkBgM,IAAI,CAAC9L,CAAvB,CAIhB,CAAU6R,CAAC,CAAG,CAAd,CAAqB,CAAJ,CAAAA,CAAjB,CAAwBA,CAAC,EAAzB,CAEC,GAAKD,OAAO,CAAEC,CAAF,CAAP,GAAiBD,OAAO,CAAE,CAAEC,CAAC,CAAG,CAAN,EAAY,CAAd,CAA7B,CAAiD,CAEhDF,mBAAmB,CAAC1R,IAApB,CAA0BV,GAA1B,CAFgD,CAGhD,KAEA,CAIF,CAED,IAAM,GAECuS,IAFD,CAAIvS,IAAC,CAAGoS,mBAAmB,CAAClS,MAApB,CAA6B,CAA3C,CAAmD,CAAL,EAAAF,IAA9C,CAAsDA,IAAC,EAAvD,CAA6D,CAEtDuS,GAFsD,CAEhDH,mBAAmB,CAAEpS,IAAF,CAF6B,CAI5D,KAAKC,KAAL,CAAWuS,MAAX,CAAmBD,GAAnB,CAAwB,CAAxB,CAJ4D,CAM5D,IAAM,GAAI7F,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAG,KAAK5M,aAAL,CAAmBG,MAAzC,CAAiDwM,CAAC,CAAGC,EAArD,CAAyDD,CAAC,EAA1D,CAEC,KAAK3M,aAAL,CAAoB2M,CAApB,EAAwB8F,MAAxB,CAAgCD,GAAhC,CAAqC,CAArC,CAID,CAED;AAEA,GAAME,KAAI,CAAG,KAAKrS,QAAL,CAAcF,MAAd,CAAuB4R,MAAM,CAAC5R,MAA3C,CAEA,MADA,MAAKE,QAAL,CAAgB0R,MAChB,CAAOW,IAEP,CAzyB8E,CA2yB/EpC,aAAa,CAAE,uBAAWqC,MAAX,CAAoB,CAElC,KAAKtS,QAAL,CAAgB,EAFkB,CAIlC,IAAM,GAECuS,MAFD,CAAI3S,CAAC,CAAG,CAAR,CAAW4S,CAAC,CAAGF,MAAM,CAACxS,MAA5B,CAAoCF,CAAC,CAAG4S,CAAxC,CAA2C5S,CAAC,EAA5C,CAEO2S,KAFP,CAEeD,MAAM,CAAE1S,CAAF,CAFrB,CAGC,KAAKI,QAAL,CAAcM,IAAd,CAAoB,GAAI4B,8CAAJ,CAAaqQ,KAAK,CAAC/S,CAAnB,CAAsB+S,KAAK,CAAC9S,CAA5B,CAA+B8S,KAAK,CAACrJ,CAAN,EAAW,CAA1C,CAApB,CAHD,CAOA,MAAO,KAEP,CAxzB8E,CA0zB/EuJ,wBAAwB,CAAE,mCAAY,CAarC;AARA;AAEA,OALM5S,MAAK,CAAG,KAAKA,KAKnB,CAJMC,MAAM,CAAGD,KAAK,CAACC,MAIrB,CAAUF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGE,MAArB,CAA6BF,CAAC,EAA9B,CAECC,KAAK,CAAED,CAAF,CAAL,CAAW8S,GAAX,CAAiB9S,CAAjB,CAYDC,KAAK,CAAC8S,IAAN,CANA,SAA4B1S,CAA5B,CAA+BE,CAA/B,CAAmC,CAElC,MAAOF,EAAC,CAACwN,aAAF,CAAkBtN,CAAC,CAACsN,aAE3B,CAED,CArBqC,CAuBrC;AAvBqC,GA4BjCmF,QA5BiC,CA4BxBC,OA5BwB,CAyB/BC,IAAI,CAAG,KAAKnT,aAAL,CAAoB,CAApB,CAzBwB,CA0B/BsR,IAAI,CAAG,KAAKtR,aAAL,CAAoB,CAApB,CA1BwB,CA8BhCmT,IAAI,EAAIA,IAAI,CAAChT,MAAL,GAAgBA,MA9BQ,GA8BC8S,OAAO,CAAG,EA9BX,EA+BhC3B,IAAI,EAAIA,IAAI,CAACnR,MAAL,GAAgBA,MA/BQ,GA+BC+S,OAAO,CAAG,EA/BX,EAiCrC,IAAM,GAECE,GAFD,CAAInT,IAAC,CAAG,CAAd,CAAiBA,IAAC,CAAGE,MAArB,CAA6BF,IAAC,EAA9B,CAEOmT,EAFP,CAEYlT,KAAK,CAAED,IAAF,CAAL,CAAW8S,GAFvB,CAIME,OAJN,EAIgBA,OAAO,CAACtS,IAAR,CAAcwS,IAAI,CAAEC,EAAF,CAAlB,CAJhB,CAKMF,OALN,EAKgBA,OAAO,CAACvS,IAAR,CAAc2Q,IAAI,CAAE8B,EAAF,CAAlB,CALhB,CASKH,OA1CgC,GA0CtB,KAAKjT,aAAL,CAAoB,CAApB,EAA0BiT,OA1CJ,EA2ChCC,OA3CgC,GA2CtB,KAAKlT,aAAL,CAAoB,CAApB,EAA0BkT,OA3CJ,CA6CrC,CAv2B8E,CAy2B/EG,MAAM,CAAE,iBAAY,CA4HnB,QAASC,OAAT,CAAiBC,KAAjB,CAAwBjP,QAAxB,CAAkCkP,OAAlC,CAA4C,CAE3C,MAAOA,QAAO,CAAGD,KAAK,CAAK,GAAKjP,QAAlB,CAA+BiP,KAAK,CAAK,EAAI,GAAKjP,QAAT,CAEvD,CAED,QAASmP,eAAT,CAAyBlP,MAAzB,CAAkC,CAEjC,GAAMmP,KAAI,CAAGnP,MAAM,CAAC1E,CAAP,CAAS8T,QAAT,GAAsBpP,MAAM,CAACzE,CAAP,CAAS6T,QAAT,EAAtB,CAA4CpP,MAAM,CAACgF,CAAP,CAASoK,QAAT,EAAzD,CAFiC,MAI5B,UAAAC,WAAW,CAAEF,IAAF,CAJiB,EAUjCE,WAAW,CAAEF,IAAF,CAAX,CAAsBtI,OAAO,CAACjL,MAAR,CAAiB,CAVN,CAWjCiL,OAAO,CAACzK,IAAR,CAAc4D,MAAM,CAAC1E,CAArB,CAAwB0E,MAAM,CAACzE,CAA/B,CAAkCyE,MAAM,CAACgF,CAAzC,CAXiC,CAa1BqK,WAAW,CAAEF,IAAF,CAbe,EAMzBE,WAAW,CAAEF,IAAF,CASnB,CAED,QAASG,cAAT,CAAwB1V,KAAxB,CAAgC,CAE/B,GAAMuV,KAAI,CAAGvV,KAAK,CAAC2V,CAAN,CAAQH,QAAR,GAAqBxV,KAAK,CAAC4V,CAAN,CAAQJ,QAAR,EAArB,CAA0CxV,KAAK,CAACqC,CAAN,CAAQmT,QAAR,EAAvD,CAF+B,MAI1B,UAAAK,UAAU,CAAEN,IAAF,CAJgB,EAU/BM,UAAU,CAAEN,IAAF,CAAV,CAAqBvI,MAAM,CAAChL,MAVG,CAW/BgL,MAAM,CAACxK,IAAP,CAAaxC,KAAK,CAAC8V,MAAN,EAAb,CAX+B,CAaxBD,UAAU,CAAEN,IAAF,CAbc,EAMvBM,UAAU,CAAEN,IAAF,CASlB,CAED,QAASQ,WAAT,CAAqBhG,EAArB,CAA0B,CAEzB,GAAMwF,KAAI,CAAGxF,EAAE,CAACrO,CAAH,CAAK8T,QAAL,GAAkBzF,EAAE,CAACpO,CAAH,CAAK6T,QAAL,EAA/B,CAFyB,MAIpB,UAAAQ,OAAO,CAAET,IAAF,CAJa,EAUzBS,OAAO,CAAET,IAAF,CAAP,CAAkBrI,GAAG,CAAClL,MAAJ,CAAa,CAVN,CAWzBkL,GAAG,CAAC1K,IAAJ,CAAUuN,EAAE,CAACrO,CAAb,CAAgBqO,EAAE,CAACpO,CAAnB,CAXyB,CAalBqU,OAAO,CAAET,IAAF,CAbW,EAMjBS,OAAO,CAAET,IAAF,CASf,CAjLD,GAAMU,KAAI,CAAG,CACZC,QAAQ,CAAE,CACTC,OAAO,CAAE,GADA,CAETpJ,IAAI,CAAE,UAFG,CAGTqJ,SAAS,CAAE,iBAHF,CADE,CAAb,CAQA;AAMA,GAJAH,IAAI,CAACzR,IAAL,CAAY,KAAKA,IAIjB,CAHAyR,IAAI,CAAClJ,IAAL,CAAY,KAAKA,IAGjB,CAFmB,EAAd,QAAKtH,IAEV,GAFwBwQ,IAAI,CAACxQ,IAAL,CAAY,KAAKA,IAEzC,EAAK,cAAK4Q,UAAV,CAAqC,CAEpC,GAAMA,WAAU,CAAG,KAAKA,UAAxB,CAEA,IAAM,GAAMrC,IAAZ,GAAmBqC,WAAnB,CAEM,SAAAA,UAAU,CAAErC,GAAF,CAFhB,GAEwCiC,IAAI,CAAEjC,GAAF,CAAJ,CAAcqC,UAAU,CAAErC,GAAF,CAFhE,EAMA,MAAOiC,KAEP,CAID,OAEOjI,OAFP,CAFM9L,QAAQ,CAAG,EAEjB,CAAUJ,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKI,QAAL,CAAcF,MAAnC,CAA2CF,CAAC,EAA5C,CAEOkM,MAFP,CAEgB,KAAK9L,QAAL,CAAeJ,CAAf,CAFhB,CAGCI,QAAQ,CAACM,IAAT,CAAewL,MAAM,CAACtM,CAAtB,CAAyBsM,MAAM,CAACrM,CAAhC,CAAmCqM,MAAM,CAAC5C,CAA1C,CAHD,CAeA,OARMrJ,MAAK,CAAG,EAQd,CAPMkL,OAAO,CAAG,EAOhB,CANMwI,WAAW,CAAG,EAMpB,CALMzI,MAAM,CAAG,EAKf,CAJM6I,UAAU,CAAG,EAInB,CAHM3I,GAAG,CAAG,EAGZ,CAFM8I,OAAO,CAAG,EAEhB,CAAUlU,IAAC,CAAG,CAAd,CAAiBA,IAAC,CAAG,KAAKC,KAAL,CAAWC,MAAhC,CAAwCF,IAAC,EAAzC,CAA+C,IAExCuM,KAAI,CAAG,KAAKtM,KAAL,CAAYD,IAAZ,CAFiC,CAMxCwU,eAAe,CAAG,cAAKzU,aAAL,CAAoB,CAApB,EAAyBC,IAAzB,CANsB,CAOxCyU,aAAa,CAA0B,CAAvB,CAAAlI,IAAI,CAACjI,MAAL,CAAYpE,MAAZ,EAPwB,CAQxCwU,mBAAmB,CAA+B,CAA5B,CAAAnI,IAAI,CAACK,aAAL,CAAmB1M,MARD,CASxCyU,YAAY,CAAoB,CAAjB,GAAApI,IAAI,CAACrO,KAAL,CAAW2V,CAAX,EAAuC,CAAjB,GAAAtH,IAAI,CAACrO,KAAL,CAAW4V,CAAjC,EAA6D,CAAjB,GAAAvH,IAAI,CAACrO,KAAL,CAAWqC,CAT9B,CAUxCqU,kBAAkB,CAA8B,CAA3B,CAAArI,IAAI,CAAC/N,YAAL,CAAkB0B,MAVC,CAY1C2U,QAAQ,CAAG,CAZ+B,CA2B9C,GAbAA,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,CAAe,CAAf,CAajB,CAZAA,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,IAYjB,CAXAA,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,IAWjB,CAVAA,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,CAAeL,eAAf,CAUjB,CATAK,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,CAAeJ,aAAf,CASjB,CARAI,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,CAAeH,mBAAf,CAQjB,CAPAG,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,CAAeF,YAAf,CAOjB,CANAE,QAAQ,CAAGxB,MAAM,CAAEwB,QAAF,CAAY,CAAZ,CAAeD,kBAAf,CAMjB,CAJA3U,KAAK,CAACS,IAAN,CAAYmU,QAAZ,CAIA,CAHA5U,KAAK,CAACS,IAAN,CAAY6L,IAAI,CAAClM,CAAjB,CAAoBkM,IAAI,CAAChM,CAAzB,CAA4BgM,IAAI,CAAC9L,CAAjC,CAGA,CAFAR,KAAK,CAACS,IAAN,CAAY6L,IAAI,CAACsB,aAAjB,CAEA,CAAK2G,eAAL,CAAuB,CAEtB,GAAMzU,cAAa,CAAG,KAAKA,aAAL,CAAoB,CAApB,EAAyBC,IAAzB,CAAtB,CAEAC,KAAK,CAACS,IAAN,CACCuT,UAAU,CAAElU,aAAa,CAAE,CAAF,CAAf,CADX,CAECkU,UAAU,CAAElU,aAAa,CAAE,CAAF,CAAf,CAFX,CAGCkU,UAAU,CAAElU,aAAa,CAAE,CAAF,CAAf,CAHX,CAMA,CAQD,GANK0U,aAML,EAJCxU,KAAK,CAACS,IAAN,CAAY8S,cAAc,CAAEjH,IAAI,CAACjI,MAAP,CAA1B,CAID,CAAKoQ,mBAAL,CAA2B,CAE1B,GAAM9H,cAAa,CAAGL,IAAI,CAACK,aAA3B,CAEA3M,KAAK,CAACS,IAAN,CACC8S,cAAc,CAAE5G,aAAa,CAAE,CAAF,CAAf,CADf,CAEC4G,cAAc,CAAE5G,aAAa,CAAE,CAAF,CAAf,CAFf,CAGC4G,cAAc,CAAE5G,aAAa,CAAE,CAAF,CAAf,CAHf,CAMA,CAQD,GANK+H,YAML,EAJC1U,KAAK,CAACS,IAAN,CAAYkT,aAAa,CAAErH,IAAI,CAACrO,KAAP,CAAzB,CAID,CAAK0W,kBAAL,CAA0B,CAEzB,GAAMpW,aAAY,CAAG+N,IAAI,CAAC/N,YAA1B,CAEAyB,KAAK,CAACS,IAAN,CACCkT,aAAa,CAAEpV,YAAY,CAAE,CAAF,CAAd,CADd,CAECoV,aAAa,CAAEpV,YAAY,CAAE,CAAF,CAAd,CAFd,CAGCoV,aAAa,CAAEpV,YAAY,CAAE,CAAF,CAAd,CAHd,CAMA,CAED,CAmED,MARA2V,KAAI,CAACA,IAAL,CAAY,EAQZ,CANAA,IAAI,CAACA,IAAL,CAAU/T,QAAV,CAAqBA,QAMrB,CALA+T,IAAI,CAACA,IAAL,CAAUhJ,OAAV,CAAoBA,OAKpB,CAJqB,CAAhB,CAAAD,MAAM,CAAChL,MAIZ,GAJyBiU,IAAI,CAACA,IAAL,CAAUjJ,MAAV,CAAmBA,MAI5C,EAHkB,CAAb,CAAAE,GAAG,CAAClL,MAGT,GAHsBiU,IAAI,CAACA,IAAL,CAAU/I,GAAV,CAAgB,CAAEA,GAAF,CAGtC,EAFA+I,IAAI,CAACA,IAAL,CAAUlU,KAAV,CAAkBA,KAElB,CAAOkU,IAEP,CAxiC8E,CA0iC/E/Q,KAAK,CAAE,gBAAY,CAElB;;;;;;;;;;;;;;;;;;;;;;KAwBA,MAAO,IAAI7H,SAAJ,GAAegU,IAAf,CAAqB,IAArB,CAEP,CAtkC8E,CAwkC/EA,IAAI,CAAE,cAAWuF,MAAX,CAAoB,CAIzB,KAAK1U,QAAL,CAAgB,EAJS,CAKzB,KAAK8K,MAAL,CAAc,EALW,CAMzB,KAAKjL,KAAL,CAAa,EANY,CAOzB,KAAKF,aAAL,CAAqB,CAAC,EAAD,CAPI,CAQzB,KAAKnC,YAAL,CAAoB,EARK,CASzB,KAAKG,YAAL,CAAoB,EATK,CAUzB,KAAKsN,WAAL,CAAmB,EAVM,CAWzB,KAAKC,WAAL,CAAmB,EAXM,CAYzB,KAAKC,aAAL,CAAqB,EAZI,CAazB,KAAK/L,WAAL,CAAmB,IAbM,CAczB,KAAKgM,cAAL,CAAsB,IAdG,CAkBzB,KAAK7H,IAAL,CAAYmR,MAAM,CAACnR,IAlBM,CAwBzB,OAFMvD,SAAQ,CAAG0U,MAAM,CAAC1U,QAExB,CAAUJ,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAGlM,QAAQ,CAACF,MAA/B,CAAuCF,CAAC,CAAGsM,EAA3C,CAA+CtM,CAAC,EAAhD,CAEC,KAAKI,QAAL,CAAcM,IAAd,CAAoBN,QAAQ,CAAEJ,CAAF,CAAR,CAAcoD,KAAd,EAApB,EAID;AAIA,OAFM8H,OAAM,CAAG4J,MAAM,CAAC5J,MAEtB,CAAUlL,IAAC,CAAG,CAAd,CAAiBsM,IAAE,CAAGpB,MAAM,CAAChL,MAA7B,CAAqCF,IAAC,CAAGsM,IAAzC,CAA6CtM,IAAC,EAA9C,CAEC,KAAKkL,MAAL,CAAYxK,IAAZ,CAAkBwK,MAAM,CAAElL,IAAF,CAAN,CAAYoD,KAAZ,EAAlB,EAID;AAIA,OAFMnD,MAAK,CAAG6U,MAAM,CAAC7U,KAErB,CAAUD,IAAC,CAAG,CAAd,CAAiBsM,IAAE,CAAGrM,KAAK,CAACC,MAA5B,CAAoCF,IAAC,CAAGsM,IAAxC,CAA4CtM,IAAC,EAA7C,CAEC,KAAKC,KAAL,CAAWS,IAAX,CAAiBT,KAAK,CAAED,IAAF,CAAL,CAAWoD,KAAX,EAAjB,EAID;AAEA,IAAM,GAECrD,cAFD,CAAIC,IAAC,CAAG,CAAR,CAAWsM,IAAE,CAAGwI,MAAM,CAAC/U,aAAP,CAAqBG,MAA3C,CAAmDF,IAAC,CAAGsM,IAAvD,CAA2DtM,IAAC,EAA5D,CAAkE,CAE3DD,aAF2D,CAE3C+U,MAAM,CAAC/U,aAAP,CAAsBC,IAAtB,CAF2C,CAI5D,cAAKD,aAAL,CAAoBC,IAApB,CAJ4D,GAMhE,KAAKD,aAAL,CAAoBC,IAApB,EAA0B,EANsC,EAUjE,IAAM,GAAI0M,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAG5M,aAAa,CAACG,MAApC,CAA4CwM,CAAC,CAAGC,EAAhD,CAAoDD,CAAC,EAArD,CAA2D,CAI1D,OAEOuB,GAFP,CAFM7C,GAAG,CAAGrL,aAAa,CAAE2M,CAAF,CAEzB,CAFgC4E,OAAO,CAAG,EAE1C,CAAUC,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAGpG,GAAG,CAAClL,MAA1B,CAAkCqR,CAAC,CAAGC,EAAtC,CAA0CD,CAAC,EAA3C,CAEOtD,EAFP,CAEY7C,GAAG,CAAEmG,CAAF,CAFf,CAICD,OAAO,CAAC5Q,IAAR,CAAcuN,EAAE,CAAC7K,KAAH,EAAd,CAJD,CAQA,KAAKrD,aAAL,CAAoBC,IAApB,EAAwBU,IAAxB,CAA8B4Q,OAA9B,CAEA,CAED,CAED;AAIA,OAEOyD,YAFP,CAFMnX,YAAY,CAAGkX,MAAM,CAAClX,YAE5B,CAAUoC,IAAC,CAAG,CAAd,CAAiBsM,KAAE,CAAG1O,YAAY,CAACsC,MAAnC,CAA2CF,IAAC,CAAGsM,KAA/C,CAAmDtM,IAAC,EAApD,CAA0D,CAKzD;AAEA,GALM+U,WAKN,CALoB,EAKpB,CAJAA,WAAW,CAACpR,IAAZ,CAAmB/F,YAAY,CAAEoC,IAAF,CAAZ,CAAkB2D,IAIrC,CAAK,SAAA/F,YAAY,CAAEoC,IAAF,CAAZ,CAAkBI,QAAvB,CAAgD,CAE/C2U,WAAW,CAAC3U,QAAZ,CAAuB,EAFwB,CAI/C,IAAM,GAAIsM,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAG/O,YAAY,CAAEoC,IAAF,CAAZ,CAAkBI,QAAlB,CAA2BF,MAAjD,CAAyDwM,GAAC,CAAGC,IAA7D,CAAiED,GAAC,EAAlE,CAECqI,WAAW,CAAC3U,QAAZ,CAAqBM,IAArB,CAA2B9C,YAAY,CAAEoC,IAAF,CAAZ,CAAkBI,QAAlB,CAA4BsM,GAA5B,EAAgCtJ,KAAhC,EAA3B,CAID,CAED;AAEA,GAAK,SAAAxF,YAAY,CAAEoC,IAAF,CAAZ,CAAkBmL,OAAvB,CAA+C,CAE9C4J,WAAW,CAAC5J,OAAZ,CAAsB,EAFwB,CAI9C,IAAM,GAAIuB,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAG/O,YAAY,CAAEoC,IAAF,CAAZ,CAAkBmL,OAAlB,CAA0BjL,MAAhD,CAAwDwM,GAAC,CAAGC,IAA5D,CAAgED,GAAC,EAAjE,CAECqI,WAAW,CAAC5J,OAAZ,CAAoBzK,IAApB,CAA0B9C,YAAY,CAAEoC,IAAF,CAAZ,CAAkBmL,OAAlB,CAA2BuB,GAA3B,EAA+BtJ,KAA/B,EAA1B,CAID,CAED,KAAKxF,YAAL,CAAkB8C,IAAlB,CAAwBqU,WAAxB,CAEA,CAED;AAIA,OAEOC,YAFP,CAFMjX,YAAY,CAAG+W,MAAM,CAAC/W,YAE5B,CAAUiC,IAAC,CAAG,CAAd,CAAiBsM,KAAE,CAAGvO,YAAY,CAACmC,MAAnC,CAA2CF,IAAC,CAAGsM,KAA/C,CAAmDtM,IAAC,EAApD,CAA0D,CAIzD;AAEA,GAJMgV,WAIN,CAJoB,EAIpB,CAAK,SAAAjX,YAAY,CAAEiC,IAAF,CAAZ,CAAkB4M,aAAvB,CAAqD,CAEpDoI,WAAW,CAACpI,aAAZ,CAA4B,EAFwB,CAIpD,IAAM,GAAIF,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAG5O,YAAY,CAAEiC,IAAF,CAAZ,CAAkB4M,aAAlB,CAAgC1M,MAAtD,CAA8DwM,GAAC,CAAGC,IAAlE,CAAsED,GAAC,EAAvE,CAA6E,IAEtEuI,gBAAe,CAAGlX,YAAY,CAAEiC,IAAF,CAAZ,CAAkB4M,aAAlB,CAAiCF,GAAjC,CAFoD,CAGtEwI,gBAAgB,CAAG,EAHmD,CAK5EA,gBAAgB,CAAC7U,CAAjB,CAAqB4U,eAAe,CAAC5U,CAAhB,CAAkB+C,KAAlB,EALuD,CAM5E8R,gBAAgB,CAAC3U,CAAjB,CAAqB0U,eAAe,CAAC1U,CAAhB,CAAkB6C,KAAlB,EANuD,CAO5E8R,gBAAgB,CAACzU,CAAjB,CAAqBwU,eAAe,CAACxU,CAAhB,CAAkB2C,KAAlB,EAPuD,CAS5E4R,WAAW,CAACpI,aAAZ,CAA0BlM,IAA1B,CAAgCwU,gBAAhC,CAEA,CAED,CAED;AAEA,GAAK,SAAAnX,YAAY,CAAEiC,IAAF,CAAZ,CAAkBiQ,WAAvB,CAAmD,CAElD+E,WAAW,CAAC/E,WAAZ,CAA0B,EAFwB,CAIlD,IAAM,GAAIvD,IAAC,CAAG,CAAR,CAAWC,IAAE,CAAG5O,YAAY,CAAEiC,IAAF,CAAZ,CAAkBiQ,WAAlB,CAA8B/P,MAApD,CAA4DwM,GAAC,CAAGC,IAAhE,CAAoED,GAAC,EAArE,CAECsI,WAAW,CAAC/E,WAAZ,CAAwBvP,IAAxB,CAA8B3C,YAAY,CAAEiC,IAAF,CAAZ,CAAkBiQ,WAAlB,CAA+BvD,GAA/B,EAAmCtJ,KAAnC,EAA9B,CAID,CAED,KAAKrF,YAAL,CAAkB2C,IAAlB,CAAwBsU,WAAxB,CAEA,CAED;AAIA,OAFM3J,YAAW,CAAGyJ,MAAM,CAACzJ,WAE3B,CAAUrL,IAAC,CAAG,CAAd,CAAiBsM,KAAE,CAAGjB,WAAW,CAACnL,MAAlC,CAA0CF,IAAC,CAAGsM,KAA9C,CAAkDtM,IAAC,EAAnD,CAEC,KAAKqL,WAAL,CAAiB3K,IAAjB,CAAuB2K,WAAW,CAAErL,IAAF,CAAX,CAAiBoD,KAAjB,EAAvB,EAID;AAIA,OAFMkI,YAAW,CAAGwJ,MAAM,CAACxJ,WAE3B,CAAUtL,IAAC,CAAG,CAAd,CAAiBsM,KAAE,CAAGhB,WAAW,CAACpL,MAAlC,CAA0CF,IAAC,CAAGsM,KAA9C,CAAkDtM,IAAC,EAAnD,CAEC,KAAKsL,WAAL,CAAiB5K,IAAjB,CAAuB4K,WAAW,CAAEtL,IAAF,CAAX,CAAiBoD,KAAjB,EAAvB,EAID;AAIA,OAFMmI,cAAa,CAAGuJ,MAAM,CAACvJ,aAE7B,CAAUvL,IAAC,CAAG,CAAd,CAAiBsM,KAAE,CAAGf,aAAa,CAACrL,MAApC,CAA4CF,IAAC,CAAGsM,KAAhD,CAAoDtM,IAAC,EAArD,CAEC,KAAKuL,aAAL,CAAmB7K,IAAnB,CAAyB6K,aAAa,CAAEvL,IAAF,CAAtC,EAID;AAEA,GAAMR,YAAW,CAAGsV,MAAM,CAACtV,WAA3B,CAEqB,IAAhB,GAAAA,WA1MoB,GA4MxB,KAAKA,WAAL,CAAmBA,WAAW,CAAC4D,KAAZ,EA5MK,EAgNzB;AAEA,GAAMoI,eAAc,CAAGsJ,MAAM,CAACtJ,cAA9B,CAkBA,MAhBwB,KAAnB,GAAAA,cAgBL,GAdC,KAAKA,cAAL,CAAsBA,cAAc,CAACpI,KAAf,EAcvB,EARA,KAAKqI,kBAAL,CAA0BqJ,MAAM,CAACrJ,kBAQjC,CAPA,KAAKC,kBAAL,CAA0BoJ,MAAM,CAACpJ,kBAOjC,CANA,KAAK/K,aAAL,CAAqBmU,MAAM,CAACnU,aAM5B,CALA,KAAKgL,iBAAL,CAAyBmJ,MAAM,CAACnJ,iBAKhC,CAJA,KAAKtI,gBAAL,CAAwByR,MAAM,CAACzR,gBAI/B,CAHA,KAAKuI,uBAAL,CAA+BkJ,MAAM,CAAClJ,uBAGtC,CAFA,KAAKC,gBAAL,CAAwBiJ,MAAM,CAACjJ,gBAE/B,CAAO,IAEP,CA9yC8E,CAizC/EsJ,aAAa,EAAI,IAIZ5G,MAJY,CAILvO,CAJK,CAEVsO,MAAM,CAAG,EAFC,CAKZT,aAAa,OALD,CAOV5N,KAAK,CAAG,KAAKA,KAPH,CAShB,IAAMD,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGC,KAAK,CAACC,MAAvB,CAA+BF,CAAC,EAAhC,CAAsC,CAErC,GAAMuM,KAAI,CAAGtM,KAAK,CAAED,CAAF,CAAlB,CAEA;AAEKuM,IAAI,CAACsB,aAAL,GAAuBA,aANS,GAQpCA,aAAa,CAAGtB,IAAI,CAACsB,aARe,CAU/B,SAAAU,KAV+B,GAYnCA,KAAK,CAACvG,KAAN,CAAoB,CAAJ,CAAAhI,CAAF,CAAYuO,KAAK,CAACC,KAZG,CAanCF,MAAM,CAAC5N,IAAP,CAAa6N,KAAb,CAbmC,EAiBpCA,KAAK,CAAG,CACPC,KAAK,CAAM,CAAJ,CAAAxO,CADA,CAEP6N,aAAa,CAAEA,aAFR,CAjB4B,CAwBrC,CASD,MAPK,UAAAU,KAOL,GALCA,KAAK,CAACvG,KAAN,CAAoB,CAAJ,CAAAhI,CAAF,CAAYuO,KAAK,CAACC,KAKjC,CAJCF,MAAM,CAAC5N,IAAP,CAAa6N,KAAb,CAID,EAAOD,MAEP,CA71C8E,CA+1C/E/Q,gBAAgB,CAAE,2BAAY,IAEvBF,SAAQ,CAAG,GAAI+X,eAAJ,GAAqBC,YAArB,CAAmC,IAAnC,CAFY,CAIvBC,cAAc,CAAG,GAAItX,qDAJE,CAMvBuX,SAAS,CAAG,GAAIC,aAAJ,CAA6C,CAA3B,CAAAnY,QAAQ,CAAC+C,QAAT,CAAkBF,MAApC,CANW,CAS7B,GAFAoV,cAAc,CAACvQ,YAAf,CAA6B,UAA7B,CAAyC,GAAI0Q,sDAAJ,CAAqBF,SAArB,CAAgC,CAAhC,EAAoCG,iBAApC,CAAuDrY,QAAQ,CAAC+C,QAAhE,CAAzC,CAEA,CAA+B,CAA1B,CAAA/C,QAAQ,CAAC8N,OAAT,CAAiBjL,MAAtB,CAAmC,CAElC,GAAMiL,QAAO,CAAG,GAAIqK,aAAJ,CAA4C,CAA1B,CAAAnY,QAAQ,CAAC8N,OAAT,CAAiBjL,MAAnC,CAAhB,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,QAA7B,CAAuC,GAAI0Q,sDAAJ,CAAqBtK,OAArB,CAA8B,CAA9B,EAAkCuK,iBAAlC,CAAqDrY,QAAQ,CAAC8N,OAA9D,CAAvC,CAEA,CAED,GAA8B,CAAzB,CAAA9N,QAAQ,CAAC6N,MAAT,CAAgBhL,MAArB,CAAkC,CAEjC,GAAMgL,OAAM,CAAG,GAAIsK,aAAJ,CAA2C,CAAzB,CAAAnY,QAAQ,CAAC6N,MAAT,CAAgBhL,MAAlC,CAAf,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,OAA7B,CAAsC,GAAI0Q,sDAAJ,CAAqBvK,MAArB,CAA6B,CAA7B,EAAiCyK,eAAjC,CAAkDtY,QAAQ,CAAC6N,MAA3D,CAAtC,CAEA,CAED,GAA2B,CAAtB,CAAA7N,QAAQ,CAAC+N,GAAT,CAAalL,MAAlB,CAA+B,CAE9B,GAAMkL,IAAG,CAAG,GAAIoK,aAAJ,CAAwC,CAAtB,CAAAnY,QAAQ,CAAC+N,GAAT,CAAalL,MAA/B,CAAZ,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,IAA7B,CAAmC,GAAI0Q,sDAAJ,CAAqBrK,GAArB,CAA0B,CAA1B,EAA8BwK,iBAA9B,CAAiDvY,QAAQ,CAAC+N,GAA1D,CAAnC,CAEA,CAED,GAA4B,CAAvB,CAAA/N,QAAQ,CAACgU,IAAT,CAAcnR,MAAnB,CAAgC,CAE/B,GAAMmR,KAAI,CAAG,GAAImE,aAAJ,CAAyC,CAAvB,CAAAnY,QAAQ,CAACgU,IAAT,CAAcnR,MAAhC,CAAb,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,KAA7B,CAAoC,GAAI0Q,sDAAJ,CAAqBpE,IAArB,CAA2B,CAA3B,EAA+BuE,iBAA/B,CAAkDvY,QAAQ,CAACgU,IAA3D,CAApC,CAEA,CAED;AAIA;AAEA,IAAM,GAAM1N,KAAZ,GAJA2R,eAAc,CAAChH,MAAf,CAAwBjR,QAAQ,CAACiR,MAIjC,CAAoBjR,QAAQ,CAACO,YAA7B,CAA4C,CAK3C,OAHMsK,MAAK,CAAG,EAGd,CAFMtK,YAAY,CAAGP,QAAQ,CAACO,YAAT,CAAuB+F,IAAvB,CAErB,CAAU3D,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGhV,YAAY,CAACsC,MAAlC,CAA0CF,CAAC,CAAG4S,CAA9C,CAAiD5S,CAAC,EAAlD,CAAwD,IAEjD+U,YAAW,CAAGnX,YAAY,CAAEoC,CAAF,CAFuB,CAIjD6V,SAAS,CAAG,GAAIC,6DAAJ,CAAsD,CAA1B,CAAAf,WAAW,CAACZ,IAAZ,CAAiBjU,MAA7C,CAAyD,CAAzD,CAJqC,CAKvD2V,SAAS,CAAClS,IAAV,CAAiBoR,WAAW,CAACpR,IAL0B,CAOvDuE,KAAK,CAACxH,IAAN,CAAYmV,SAAS,CAACH,iBAAV,CAA6BX,WAAW,CAACZ,IAAzC,CAAZ,CAEA,CAEDmB,cAAc,CAAC5W,eAAf,CAAgCiF,IAAhC,EAAyCuE,KAEzC,CAED;AAEA,GAAmC,CAA9B,CAAA7K,QAAQ,CAACiO,WAAT,CAAqBpL,MAA1B,CAAuC,CAEtC,GAAMoL,YAAW,CAAG,GAAIwK,6DAAJ,CAA0D,CAA9B,CAAAzY,QAAQ,CAACiO,WAAT,CAAqBpL,MAAjD,CAA6D,CAA7D,CAApB,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,WAA7B,CAA0CuG,WAAW,CAACyK,iBAAZ,CAA+B1Y,QAAQ,CAACiO,WAAxC,CAA1C,CAEA,CAED,GAAmC,CAA9B,CAAAjO,QAAQ,CAACgO,WAAT,CAAqBnL,MAA1B,CAAuC,CAEtC,GAAMmL,YAAW,CAAG,GAAIyK,6DAAJ,CAA0D,CAA9B,CAAAzY,QAAQ,CAACgO,WAAT,CAAqBnL,MAAjD,CAA6D,CAA7D,CAApB,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,YAA7B,CAA2CsG,WAAW,CAAC0K,iBAAZ,CAA+B1Y,QAAQ,CAACgO,WAAxC,CAA3C,CAEA,CAED;AAcA,MAZiC,KAA5B,GAAAhO,QAAQ,CAACmO,cAYd,GAVC8J,cAAc,CAAC9J,cAAf,CAAgCnO,QAAQ,CAACmO,cAAT,CAAwBpI,KAAxB,EAUjC,EAN8B,IAAzB,GAAA/F,QAAQ,CAACmC,WAMd,GAJC8V,cAAc,CAAC9V,WAAf,CAA6BnC,QAAQ,CAACmC,WAAT,CAAqB4D,KAArB,EAI9B,EAAOkS,cAEP,CA97C8E,CAg8C9EpS,uBAAuB,CAAE,kCAAY,CAErC;AAFqC,GAI/BoS,eAAc,CAAG,GAAItX,qDAJU,CAM/BuX,SAAS,CAAG,GAAIC,aAAJ,CAAyC,CAAvB,MAAKpV,QAAL,CAAcF,MAAhC,CANmB,CASrC,GAFAoV,cAAc,CAACvQ,YAAf,CAA6B,UAA7B,CAAyC,GAAI0Q,sDAAJ,CAAqBF,SAArB,CAAgC,CAAhC,EAAoCG,iBAApC,CAAuD,KAAKtV,QAA5D,CAAzC,CAEA,CAA2B,CAAtB,MAAK+K,OAAL,CAAajL,MAAlB,CAA+B,IACxBiL,QAAO,CAAG,GAAIqK,aAAJ,CAAkB,KAAKrK,OAAL,CAAajL,MAA/B,CADc,CAEvB8V,MAAM,CAAG,GAAIP,sDAAJ,CAAqBtK,OAArB,CAA8B,CAA9B,EAAkC8K,SAAlC,CAA6C,KAAK9K,OAAlD,CAFc,CAG9BmK,cAAc,CAACvQ,YAAf,CAA6B,QAA7B,CAAwCiR,MAAxC,CACA,CACC,GAAuB,CAAlB,MAAK5K,GAAL,CAASlL,MAAT,EAA4C,CAArB,MAAKkL,GAAL,CAAS,CAAT,EAAYlL,MAAxC,CAAqD,CAEtD,GAAMkL,IAAG,CAAG,GAAIoK,aAAJ,CAAuC,CAArB,MAAKpK,GAAL,CAAS,CAAT,EAAYlL,MAA9B,CAAZ,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,IAA7B,CAAmC,GAAI0Q,sDAAJ,CAAqBrK,GAArB,CAA0B,CAA1B,EAA8B6K,SAA9B,CAAyC,KAAK7K,GAAL,CAAS,CAAT,CAAzC,CAAnC,CACA,CAED,GAAuB,CAAlB,MAAKA,GAAL,CAASlL,MAAT,EAA4C,CAArB,MAAKkL,GAAL,CAAS,CAAT,EAAYlL,MAAxC,CAAqD,CACpD,GAAMmR,KAAI,CAAG,GAAImE,aAAJ,CAAuC,CAArB,MAAKpK,GAAL,CAAS,CAAT,EAAYlL,MAA9B,CAAb,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,KAA7B,CAAoC,GAAI0Q,sDAAJ,CAAqBpE,IAArB,CAA2B,CAA3B,EAA+B4E,SAA/B,CAA0C,KAAK7K,GAAL,CAAS,CAAT,CAA1C,CAApC,CACA,CAEC,GAA0B,CAArB,MAAKF,MAAL,CAAYhL,MAAjB,CAA6B,CAG3B,OADMgW,WAAU,CAAG,EACnB,CAASlW,CAAC,CAAG,CAAb,CAAiBA,CAAC,CAAG,KAAKkL,MAAL,CAAYhL,MAAjC,CAAyCF,CAAC,EAA1C,CACEkW,UAAU,CAACxV,IAAX,CAAgB,GAAI1B,4CAAJ,CAAW,KAAKkM,MAAL,CAAalL,CAAb,CAAX,CAAhB,EAEF,GAAMkL,OAAM,CAAG,GAAIsK,aAAJ,CAAsC,CAApB,CAAAU,UAAU,CAAChW,MAA7B,CAAf,CACHoV,cAAc,CAACvQ,YAAf,CAA6B,OAA7B,CAAsC,GAAI0Q,sDAAJ,CAAqBvK,MAArB,CAA6B,CAA7B,EAAiCyK,eAAjC,CAAkDO,UAAlD,CAAtC,CAEE,CATD,IASO,CAGL,OADMC,YAAW,CAAG,GAAIX,aAAJ,CAAyC,CAAvB,MAAKpV,QAAL,CAAcF,MAAhC,CACpB,CAASF,IAAC,CAAG,CAAb,CAAgBA,IAAC,CAA0B,CAAvB,MAAKI,QAAL,CAAcF,MAAlC,CAA8CF,IAAC,EAA/C,CACEmW,WAAW,CAACnW,IAAD,CAAX,CAAiB,CAAjB,CAEFsV,cAAc,CAACvQ,YAAf,CAA6B,OAA7B,CAAsC,GAAI0Q,sDAAJ,CAAqBU,WAArB,CAAkC,CAAlC,CAAtC,CAED,CAED,GAAwB,CAApB,MAAKlW,KAAL,CAAWC,MAAf,CAA2B,CAMzB,OAJIgL,QAAM,CAAG,EAIb,CAFImH,OAAO,CAAG,EAEd,CAASrS,IAAC,CAAG,CAAb,CAAiBA,IAAC,CAAG,KAAKC,KAAL,CAAWC,MAAhC,CAAwCF,IAAC,EAAzC,CAA6C,CAE3CqS,OAAO,CAAC3R,IAAR,CAAa,KAAKT,KAAL,CAAWD,IAAX,EAAcK,CAA3B,CAA8B,KAAKJ,KAAL,CAAWD,IAAX,EAAcO,CAA5C,CAA+C,KAAKN,KAAL,CAAWD,IAAX,EAAcS,CAA7D,CAF2C,CAI3C,GAAMjC,aAAY,CAAG,KAAKyB,KAAL,CAAWD,IAAX,EAAcxB,YAAnC,CAEE,GAA6B,CAAxB,GAAAA,YAAY,CAAC0B,MAAlB,CAEEgL,OAAM,CAACxK,IAAP,CAAalC,YAAY,CAAE,CAAF,CAAzB,CAAgCA,YAAY,CAAE,CAAF,CAA5C,CAAmDA,YAAY,CAAE,CAAF,CAA/D,CAFF,KAIO,CAEL,GAAMN,MAAK,CAAG,KAAK+B,KAAL,CAAWD,IAAX,EAAc9B,KAA5B,CAEAgN,OAAM,CAACxK,IAAP,CAAaxC,KAAb,CAAoBA,KAApB,CAA2BA,KAA3B,CAEH,CAEF,CAEF;AAEL;AACA;AAEA;AAEMoX,cAAc,CAACc,QAAf,CAAyB/D,OAAzB,CAjCyB,CAmCzBiD,cAAc,CAAChH,MAAf,CAAwB,KAAK6G,aAAL,EAEzB,CAEH;AAEE,GAA+B,CAA3B,MAAKvX,YAAL,CAAkBsC,MAAtB,CAAkC,CAKnC,OAHMgI,MAAK,CAAG,EAGd,CAFSmO,YAAY,CAAG,EAExB,CAAUrW,IAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAG,KAAKhV,YAAL,CAAkBsC,MAAvC,CAA+CF,IAAC,CAAG4S,CAAnD,CAAsD5S,IAAC,EAAvD,CAA6D,IAEtD+U,YAAW,CAAG,KAAKnX,YAAL,CAAmBoC,IAAnB,CAFwC,CAItD6V,SAAS,CAAG,GAAIC,6DAAJ,CAA0D,CAA9B,CAAAf,WAAW,CAAC3U,QAAZ,CAAqBF,MAAjD,CAA6D,CAA7D,CAJ0C,CASxD,GAJJ2V,SAAS,CAAClS,IAAV,CAAiBoR,WAAW,CAACpR,IAIzB,CAFJuE,KAAK,CAACxH,IAAN,CAAYmV,SAAS,CAACH,iBAAV,CAA6BX,WAAW,CAAC3U,QAAzC,CAAZ,CAEI,CAAI2U,WAAW,CAAC5J,OAAhB,CAAyB,CAGvB,GAAM0K,WAAS,CAAG,GAAIC,6DAAJ,CAAyD,CAA7B,CAAAf,WAAW,CAAC5J,OAAZ,CAAoBjL,MAAhD,CAA4D,CAA5D,CAAlB,CACA2V,UAAS,CAAClS,IAAV,CAAiBoR,WAAW,CAACpR,IAJN,CAMvB0S,YAAY,CAAC3V,IAAb,CAAmBmV,UAAS,CAACH,iBAAV,CAA6BX,WAAW,CAAC5J,OAAzC,CAAnB,CAED,CAEL,CAEDmK,cAAc,CAAC5W,eAAf,CAA+B2F,QAA/B,CAA0C6D,KA1BP,CA2BhCoN,cAAc,CAAC5W,eAAf,CAA+B4F,MAA/B,CAAwC+R,YAE3C,CAED;AAEA,GAA+B,CAA1B,MAAK/K,WAAL,CAAiBpL,MAAtB,CAAmC,CAElC,GAAMoL,YAAW,CAAG,GAAIwK,6DAAJ,CAAsD,CAA1B,MAAKxK,WAAL,CAAiBpL,MAA7C,CAAyD,CAAzD,CAApB,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,WAA7B,CAA0CuG,WAAW,CAACyK,iBAAZ,CAA+B,KAAKzK,WAApC,CAA1C,CAEA,CAED,GAA+B,CAA1B,MAAKD,WAAL,CAAiBnL,MAAtB,CAAmC,CAElC,GAAMmL,YAAW,CAAG,GAAIyK,6DAAJ,CAAsD,CAA1B,MAAKzK,WAAL,CAAiBnL,MAA7C,CAAyD,CAAzD,CAApB,CACAoV,cAAc,CAACvQ,YAAf,CAA6B,YAA7B,CAA2CsG,WAAW,CAAC0K,iBAAZ,CAA+B,KAAK1K,WAApC,CAA3C,CAEA,CAED;AAcA,MAZ6B,KAAxB,QAAKG,cAYV,GAVC8J,cAAc,CAAC9J,cAAf,CAAgC,KAAKA,cAAL,CAAoBpI,KAApB,EAUjC,EAN0B,IAArB,QAAK5D,WAMV,GAJC8V,cAAc,CAAC9V,WAAf,CAA6B,KAAKA,WAAL,CAAiB4D,KAAjB,EAI9B,EAAOkS,cAEP,CAplD8E,CAslD/EgB,eAAe,CAAE,0BAAY,CAE5BlI,OAAO,CAACC,KAAR,CAAe,sDAAf,CAEA,CA1lD8E,CA4lD/EkI,oBAAoB,CAAE,+BAAY,CAEjCnI,OAAO,CAACC,KAAR,CAAe,0GAAf,CAEA,CAhmD8E,CAkmD/EmI,WAAW,CAAE,qBAAWvK,MAAX,CAAoB,CAGhC,MADAmC,QAAO,CAACqI,IAAR,CAAc,qEAAd,CACA,CAAO,KAAKjO,YAAL,CAAmByD,MAAnB,CAEP,CAvmD8E,CAymD/E1E,OAAO,CAAE,kBAAY,CAEpB,KAAKmP,aAAL,CAAoB,CAAEzL,IAAI,CAAE,SAAR,CAApB,CAEA,CA7mD8E,CAA3D,C,CAinDrB1P,QAAQ,CAACob,8BAAT,CAA0C,SAAWC,MAAX,CAAoB,IAEzDtB,eAAc,CAAG,GAAItX,qDAFoC,CAIvDX,QAAQ,CAAGuZ,MAAM,CAACvZ,QAJqC,CAM7D,GAAKuZ,MAAM,CAACC,QAAP,EAAmBD,MAAM,CAACE,MAA/B,CAAwC,IAEjCvB,UAAS,CAAG,GAAIO,6DAAJ,CAAuD,CAA3B,CAAAzY,QAAQ,CAAC+C,QAAT,CAAkBF,MAA9C,CAA0D,CAA1D,CAFqB,CAGjCgL,MAAM,CAAG,GAAI4K,6DAAJ,CAAqD,CAAzB,CAAAzY,QAAQ,CAAC6N,MAAT,CAAgBhL,MAA5C,CAAwD,CAAxD,CAHwB,CAQvC,GAHAoV,cAAc,CAACvQ,YAAf,CAA6B,UAA7B,CAAyCwQ,SAAS,CAACG,iBAAV,CAA6BrY,QAAQ,CAAC+C,QAAtC,CAAzC,CAGA,CAFAkV,cAAc,CAACvQ,YAAf,CAA6B,OAA7B,CAAsCmG,MAAM,CAACyK,eAAP,CAAwBtY,QAAQ,CAAC6N,MAAjC,CAAtC,CAEA,CAAK7N,QAAQ,CAACkO,aAAT,EAA0BlO,QAAQ,CAACkO,aAAT,CAAuBrL,MAAvB,GAAkC7C,QAAQ,CAAC+C,QAAT,CAAkBF,MAAnF,CAA4F,CAE3F,GAAMqL,cAAa,CAAG,GAAIuK,6DAAJ,CAA4BzY,QAAQ,CAACkO,aAAT,CAAuBrL,MAAnD,CAA2D,CAA3D,CAAtB,CAEAoV,cAAc,CAACvQ,YAAf,CAA6B,cAA7B,CAA6CwG,aAAa,CAAC0K,SAAd,CAAyB5Y,QAAQ,CAACkO,aAAlC,CAA7C,CAEA,CAEgC,IAA5B,GAAAlO,QAAQ,CAACmO,cAhByB,GAkBtC8J,cAAc,CAAC9J,cAAf,CAAgCnO,QAAQ,CAACmO,cAAT,CAAwBpI,KAAxB,EAlBM,EAsBT,IAAzB,GAAA/F,QAAQ,CAACmC,WAtByB,GAwBtC8V,cAAc,CAAC9V,WAAf,CAA6BnC,QAAQ,CAACmC,WAAT,CAAqB4D,KAArB,EAxBS,CA4BvC,CA5BD,IA4BYwT,OAAM,CAAClF,MA5BnB,GA8BC4D,cAAc,CAAGjY,QAAQ,CAACE,gBAAT,EA9BlB,EAkCA,MAAO+X,eAEP,C,CAED,KAAMF,eAAe,CAEpBpJ,WAAW,EAAG,CAeb;AAKA;AAlBA,KAAK5L,QAAL,CAAgB,EAFH,CAGb,KAAK+K,OAAL,CAAe,EAHF,CAIb,KAAKD,MAAL,CAAc,EAJD,CAKb,KAAKE,GAAL,CAAW,EALE,CAMb,KAAKiG,IAAL,CAAY,EANC,CAQb,KAAK/C,MAAL,CAAc,EARD,CAUb,KAAK1Q,YAAL,CAAoB,EAVP,CAYb,KAAKyN,WAAL,CAAmB,EAZN,CAab,KAAKC,WAAL,CAAmB,EAbN,CAiBb,KAAK9L,WAAL,CAAmB,IAjBN,CAkBb,KAAKgM,cAAL,CAAsB,IAlBT,CAsBb,KAAKE,kBAAL,GAtBa,CAuBb,KAAKC,iBAAL,GAvBa,CAwBb,KAAKtI,gBAAL,GAxBa,CAyBb,KAAK1C,aAAL,GAzBa,CA0Bb,KAAKkL,gBAAL,GAEA,CAEDsJ,aAAa,CAAE9X,QAAF,CAAa,IAIrBkR,MAJqB,CAIdvO,CAJc,CAEnBsO,MAAM,CAAG,EAFU,CAKrBT,aAAa,OALQ,CAOnB5N,KAAK,CAAG5C,QAAQ,CAAC4C,KAPE,CASzB,IAAMD,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGC,KAAK,CAACC,MAAvB,CAA+BF,CAAC,EAAhC,CAAsC,CAErC,GAAMuM,KAAI,CAAGtM,KAAK,CAAED,CAAF,CAAlB,CAEA;AAEKuM,IAAI,CAACsB,aAAL,GAAuBA,aANS,GAQpCA,aAAa,CAAGtB,IAAI,CAACsB,aARe,CAU/BU,KAAK,SAV0B,GAYnCA,KAAK,CAACvG,KAAN,CAAoB,CAAJ,CAAAhI,CAAF,CAAYuO,KAAK,CAACC,KAZG,CAanCF,MAAM,CAAC5N,IAAP,CAAa6N,KAAb,CAbmC,EAiBpCA,KAAK,CAAG,CACPC,KAAK,CAAM,CAAJ,CAAAxO,CADA,CAEP6N,aAAa,CAAEA,aAFR,CAjB4B,CAwBrC,CAEIU,KAAK,SAnCe,GAqCxBA,KAAK,CAACvG,KAAN,CAAoB,CAAJ,CAAAhI,CAAF,CAAYuO,KAAK,CAACC,KArCR,CAsCxBF,MAAM,CAAC5N,IAAP,CAAa6N,KAAb,CAtCwB,EA0CzB,KAAKD,MAAL,CAAcA,MAEd,CAED+G,YAAY,CAAEhY,QAAF,CAAa,IAcpB0Z,qBAdoB,CAElB9W,KAAK,CAAG5C,QAAQ,CAAC4C,KAFC,CAGlBG,QAAQ,CAAG/C,QAAQ,CAAC+C,QAHF,CAIlBL,aAAa,CAAG1C,QAAQ,CAAC0C,aAJP,CAMlByU,eAAe,CAAGzU,aAAa,CAAE,CAAF,CAAb,EAAkD,CAA5B,CAAAA,aAAa,CAAE,CAAF,CAAb,CAAmBG,MANzC,CAOlB8W,gBAAgB,CAAGjX,aAAa,CAAE,CAAF,CAAb,EAAkD,CAA5B,CAAAA,aAAa,CAAE,CAAF,CAAb,CAAmBG,MAP1C,CAWlBtC,YAAY,CAAGP,QAAQ,CAACO,YAXN,CAYlBqZ,kBAAkB,CAAGrZ,YAAY,CAACsC,MAZhB,CAgBxB,GAA0B,CAArB,CAAA+W,kBAAL,CAA8B,CAE7BF,oBAAoB,CAAG,EAFM,CAI7B,IAAM,GAAI/W,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGiX,kBAArB,CAAyCjX,CAAC,EAA1C,CAEC+W,oBAAoB,CAAE/W,CAAF,CAApB,CAA4B,CAC3B2D,IAAI,CAAE/F,YAAY,CAAEoC,CAAF,CAAZ,CAAkB2D,IADG,CAE1BwQ,IAAI,CAAE,EAFoB,CAA5B,CAOD,KAAKvW,YAAL,CAAkByG,QAAlB,CAA6B0S,oBAE7B,CA/BuB,GAoCpBG,mBApCoB,CAiClBnZ,YAAY,CAAGV,QAAQ,CAACU,YAjCN,CAkClBoZ,kBAAkB,CAAGpZ,YAAY,CAACmC,MAlChB,CAsCxB,GAA0B,CAArB,CAAAiX,kBAAL,CAA8B,CAE7BD,kBAAkB,CAAG,EAFQ,CAI7B,IAAM,GAAIlX,KAAC,CAAG,CAAd,CAAiBA,IAAC,CAAGmX,kBAArB,CAAyCnX,IAAC,EAA1C,CAECkX,kBAAkB,CAAElX,IAAF,CAAlB,CAA0B,CACzB2D,IAAI,CAAE5F,YAAY,CAAEiC,IAAF,CAAZ,CAAkB2D,IADC,CAExBwQ,IAAI,CAAE,EAFkB,CAA1B,CAOD,KAAKvW,YAAL,CAAkB0G,MAAlB,CAA2B4S,kBAE3B,CAED;AAvDwB,GAyDlB5L,YAAW,CAAGjO,QAAQ,CAACiO,WAzDL,CA0DlBD,WAAW,CAAGhO,QAAQ,CAACgO,WA1DL,CA4DlB+L,cAAc,CAAG9L,WAAW,CAACpL,MAAZ,GAAuBE,QAAQ,CAACF,MA5D/B,CA6DlBmX,cAAc,CAAGhM,WAAW,CAACnL,MAAZ,GAAuBE,QAAQ,CAACF,MA7D/B,CAiED,CAAlB,CAAAE,QAAQ,CAACF,MAAT,EAAwC,CAAjB,GAAAD,KAAK,CAACC,MAjEV,EAmEvBkO,OAAO,CAACC,KAAR,CAAe,8DAAf,CAnEuB,CAuExB,IAAM,GAEC9B,KAFD,CAAIvM,IAAC,CAAG,CAAd,CAAiBA,IAAC,CAAGC,KAAK,CAACC,MAA3B,CAAmCF,IAAC,EAApC,CAA0C,CAEnCuM,IAFmC,CAE5BtM,KAAK,CAAED,IAAF,CAFuB,CAIzC,KAAKI,QAAL,CAAcM,IAAd,CAAoBN,QAAQ,CAAEmM,IAAI,CAAClM,CAAP,CAA5B,CAAwCD,QAAQ,CAAEmM,IAAI,CAAChM,CAAP,CAAhD,CAA4DH,QAAQ,CAAEmM,IAAI,CAAC9L,CAAP,CAApE,CAJyC,CAMzC,GAAMmM,cAAa,CAAGL,IAAI,CAACK,aAA3B,CAEA,GAA8B,CAAzB,GAAAA,aAAa,CAAC1M,MAAnB,CAEC,KAAKiL,OAAL,CAAazK,IAAb,CAAmBkM,aAAa,CAAE,CAAF,CAAhC,CAAuCA,aAAa,CAAE,CAAF,CAApD,CAA2DA,aAAa,CAAE,CAAF,CAAxE,CAFD,KAIO,CAEN,GAAMtI,OAAM,CAAGiI,IAAI,CAACjI,MAApB,CAEA,KAAK6G,OAAL,CAAazK,IAAb,CAAmB4D,MAAnB,CAA2BA,MAA3B,CAAmCA,MAAnC,CAEA,CAED,GAAM9F,aAAY,CAAG+N,IAAI,CAAC/N,YAA1B,CAEA,GAA6B,CAAxB,GAAAA,YAAY,CAAC0B,MAAlB,CAEC,KAAKgL,MAAL,CAAYxK,IAAZ,CAAkBlC,YAAY,CAAE,CAAF,CAA9B,CAAqCA,YAAY,CAAE,CAAF,CAAjD,CAAwDA,YAAY,CAAE,CAAF,CAApE,CAFD,KAIO,CAEN,GAAMN,MAAK,CAAGqO,IAAI,CAACrO,KAAnB,CAEA,KAAKgN,MAAL,CAAYxK,IAAZ,CAAkBxC,KAAlB,CAAyBA,KAAzB,CAAgCA,KAAhC,CAEA,CAED,GAAK,KAAAsW,eAAL,CAAgC,CAE/B,GAAM8C,UAAS,CAAGvX,aAAa,CAAE,CAAF,CAAb,CAAoBC,IAApB,CAAlB,CAEK,SAAAsX,SAJ0B,EAU9BlJ,OAAO,CAACqI,IAAR,CAAc,0DAAd,CAA0EzW,IAA1E,CAV8B,CAY9B,KAAKoL,GAAL,CAAS1K,IAAT,CAAe,GAAIf,8CAAnB,CAA8B,GAAIA,8CAAlC,CAA6C,GAAIA,8CAAjD,CAZ8B,EAM9B,KAAKyL,GAAL,CAAS1K,IAAT,CAAe4W,SAAS,CAAE,CAAF,CAAxB,CAA+BA,SAAS,CAAE,CAAF,CAAxC,CAA+CA,SAAS,CAAE,CAAF,CAAxD,CAUD,CAED,GAAK,KAAAN,gBAAL,CAAiC,CAEhC,GAAMM,WAAS,CAAGvX,aAAa,CAAE,CAAF,CAAb,CAAoBC,IAApB,CAAlB,CAEK,SAAAsX,UAJ2B,EAU/BlJ,OAAO,CAACqI,IAAR,CAAc,2DAAd,CAA2EzW,IAA3E,CAV+B,CAY/B,KAAKqR,IAAL,CAAU3Q,IAAV,CAAgB,GAAIf,8CAApB,CAA+B,GAAIA,8CAAnC,CAA8C,GAAIA,8CAAlD,CAZ+B,EAM/B,KAAK0R,IAAL,CAAU3Q,IAAV,CAAgB4W,UAAS,CAAE,CAAF,CAAzB,CAAgCA,UAAS,CAAE,CAAF,CAAzC,CAAgDA,UAAS,CAAE,CAAF,CAAzD,CAUD,CAED;AAEA,IAAM,GAECvC,YAFD,CAAIrI,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGuK,kBAArB,CAAyCvK,CAAC,EAA1C,CAEOqI,WAFP,CAEqBnX,YAAY,CAAE8O,CAAF,CAAZ,CAAkBtM,QAFvC,CAIC2W,oBAAoB,CAAErK,CAAF,CAApB,CAA0ByH,IAA1B,CAA+BzT,IAA/B,CAAqCqU,WAAW,CAAExI,IAAI,CAAClM,CAAP,CAAhD,CAA4D0U,WAAW,CAAExI,IAAI,CAAChM,CAAP,CAAvE,CAAmFwU,WAAW,CAAExI,IAAI,CAAC9L,CAAP,CAA9F,CAJD,CAQA,IAAM,GAECuU,YAFD,CAAItI,GAAC,CAAG,CAAd,CAAiBA,GAAC,CAAGyK,kBAArB,CAAyCzK,GAAC,EAA1C,CAEOsI,WAFP,CAEqBjX,YAAY,CAAE2O,GAAF,CAAZ,CAAkBE,aAAlB,CAAiC5M,IAAjC,CAFrB,CAICkX,kBAAkB,CAAExK,GAAF,CAAlB,CAAwByH,IAAxB,CAA6BzT,IAA7B,CAAmCsU,WAAW,CAAC3U,CAA/C,CAAkD2U,WAAW,CAACzU,CAA9D,CAAiEyU,WAAW,CAACvU,CAA7E,CAJD,CAQA;AAEK2W,cA1FoC,EA4FxC,KAAK9L,WAAL,CAAiB5K,IAAjB,CAAuB4K,WAAW,CAAEiB,IAAI,CAAClM,CAAP,CAAlC,CAA8CiL,WAAW,CAAEiB,IAAI,CAAChM,CAAP,CAAzD,CAAqE+K,WAAW,CAAEiB,IAAI,CAAC9L,CAAP,CAAhF,CA5FwC,CAgGpC4W,cAhGoC,EAkGxC,KAAKhM,WAAL,CAAiB3K,IAAjB,CAAuB2K,WAAW,CAAEkB,IAAI,CAAClM,CAAP,CAAlC,CAA8CgL,WAAW,CAAEkB,IAAI,CAAChM,CAAP,CAAzD,CAAqE8K,WAAW,CAAEkB,IAAI,CAAC9L,CAAP,CAAhF,CAID,CAsBD,MApBA,MAAK0U,aAAL,CAAoB9X,QAApB,CAoBA,CAlBA,KAAKqO,kBAAL,CAA0BrO,QAAQ,CAACqO,kBAkBnC,CAjBA,KAAKC,iBAAL,CAAyBtO,QAAQ,CAACsO,iBAiBlC,CAhBA,KAAKtI,gBAAL,CAAwBhG,QAAQ,CAACgG,gBAgBjC,CAfA,KAAK1C,aAAL,CAAqBtD,QAAQ,CAACsD,aAe9B,CAdA,KAAKkL,gBAAL,CAAwBxO,QAAQ,CAACwO,gBAcjC,CAZiC,IAA5B,GAAAxO,QAAQ,CAACmO,cAYd,GAVC,KAAKA,cAAL,CAAsBnO,QAAQ,CAACmO,cAAT,CAAwBpI,KAAxB,EAUvB,EAN8B,IAAzB,GAAA/F,QAAQ,CAACmC,WAMd,GAJC,KAAKA,WAAL,CAAmBnC,QAAQ,CAACmC,WAAT,CAAqB4D,KAArB,EAIpB,EAAO,IAEP,CAnRmB,CAuRrB,KAAM4K,MAAM,CAEXhC,WAAW,CAAE3L,CAAF,CAAKE,CAAL,CAAQE,CAAR,CAAW6D,MAAX,CAAmBpG,KAAnB,CAA8C,IAApB2P,cAAoB,wDAAJ,CAAI,CAExD,KAAKxN,CAAL,CAASA,CAF+C,CAGxD,KAAKE,CAAL,CAASA,CAH+C,CAIxD,KAAKE,CAAL,CAASA,CAJ+C,CAMxD,KAAK6D,MAAL,CAAgBA,MAAM,EAAIA,MAAM,CAACiT,SAAnB,CAAiCjT,MAAjC,CAA0C,GAAIhC,8CANJ,CAOxD,KAAKsK,aAAL,CAAqB8C,KAAK,CAAC8H,OAAN,CAAelT,MAAf,EAA0BA,MAA1B,CAAmC,EAPA,CASxD,KAAKpG,KAAL,CAAeA,KAAK,EAAIA,KAAK,CAACuZ,OAAjB,CAA6BvZ,KAA7B,CAAqC,GAAIc,4CATE,CAUxD,KAAKR,YAAL,CAAoBkR,KAAK,CAAC8H,OAAN,CAAetZ,KAAf,EAAyBA,KAAzB,CAAiC,EAVG,CAYxD,KAAK2P,aAAL,CAAqBA,aAErB,CAEDzK,KAAK,EAAG,CAEP,MAAO,IAAI,MAAK4I,WAAT,GAAuBuD,IAAvB,CAA6B,IAA7B,CAEP,CAEDA,IAAI,CAAEuF,MAAF,CAAW,CAEd,KAAKzU,CAAL,CAASyU,MAAM,CAACzU,CAFF,CAGd,KAAKE,CAAL,CAASuU,MAAM,CAACvU,CAHF,CAId,KAAKE,CAAL,CAASqU,MAAM,CAACrU,CAJF,CAMd,KAAK6D,MAAL,CAAYiL,IAAZ,CAAkBuF,MAAM,CAACxQ,MAAzB,CANc,CAOd,KAAKpG,KAAL,CAAWqR,IAAX,CAAiBuF,MAAM,CAAC5W,KAAxB,CAPc,CASd,KAAK2P,aAAL,CAAqBiH,MAAM,CAACjH,aATd,CAWd,IAAM,GAAI7N,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAGwI,MAAM,CAAClI,aAAP,CAAqB1M,MAA3C,CAAmDF,CAAC,CAAGsM,EAAvD,CAA2DtM,CAAC,EAA5D,CAEC,KAAK4M,aAAL,CAAoB5M,CAApB,EAA0B8U,MAAM,CAAClI,aAAP,CAAsB5M,CAAtB,EAA0BoD,KAA1B,EAA1B,CAID,IAAM,GAAIpD,KAAC,CAAG,CAAR,CAAWsM,KAAE,CAAGwI,MAAM,CAACtW,YAAP,CAAoB0B,MAA1C,CAAkDF,IAAC,CAAGsM,KAAtD,CAA0DtM,IAAC,EAA3D,CAEC,KAAKxB,YAAL,CAAmBwB,IAAnB,EAAyB8U,MAAM,CAACtW,YAAP,CAAqBwB,IAArB,EAAyBoD,KAAzB,EAAzB,CAID,MAAO,KAEP,CAjDU,C;;;;;;2EC9+DZ,GAAM1G,MAAK,CAAGzB,mBAAO,CAAC,CAAD,CAArB,CAEA,QAASyc,WAAT,CAAoBC,GAApB,CAAyB,IACpBC,UAAS,CAAGD,GADQ,CAElBE,MAAM,CAAI5c,mBAAO,CAAC,CAAD,CAAP,CAAkBK,WAFV,CAIxB,GAAIuc,MAAJ,CAAY,CACqB,GAA5B,EAAAA,MAAM,CAACA,MAAM,CAAC3X,MAAP,CAAe,CAAhB,CADC,GAEV2X,MAAM,2BAAGA,MAAM,CAAG,GAAZ,CAFI,EAGX,GAAMhE,EAAC,qBAAP,CACKA,CAAC,CAACiE,IAAF,CAAOH,GAAP,CAJM,GAKVC,SAAS,CAAIC,MAAM,CAAGF,GALZ,CAOX,CAED,MAAOC,UACP,CAED;AACA,QAASpb,iBAAT,CAA0Bmb,GAA1B,CAA+BxD,IAA/B,CAAqC4D,QAArC,CAA+CC,aAA/C,CAA8D,CAC1D;AACA,GAAMC,QAAO,CAAG,GAAIC,eAApB,CAGA;AAFAD,OAAO,CAACE,IAAR,CAAa,KAAb,CAAoBT,UAAU,CAACC,GAAD,CAA9B,IAH0D,CAM1DM,OAAO,CAACG,kBAAR,CAA6B,IAAM,CAEL,CAAtB,EAAAH,OAAO,CAACI,UAFmB,GAIL,GAAlB,EAAAJ,OAAO,CAACK,MAJe,CAKvBP,QAAQ,CAACE,OAAO,CAACM,YAAT,CAAuBpE,IAAvB,CALe,CAOvB6D,aAAa,CAACL,GAAD,CAPU,CAUlC,CAhByD,CAkB1DM,OAAO,CAACO,IAAR,CAAa,IAAb,CACH,CAED,QAAS/b,kBAAT,CAA2Bgc,IAA3B,CAAiCV,QAAjC,CAA2CC,aAA3C,CAA0D,CAKtD;AACA,QAASU,gBAAT,CAAyBC,IAAzB,CAA+BC,QAA/B,CAAyC,CACrCC,MAAM,CAACD,QAAD,CAAN,CAAmBD,IADkB,CAErCG,WAAW,EAF0B,CAKjCA,WAAW,EAAIC,OALkB,EAMjChB,QAAQ,CAACc,MAAD,CAEf,CAED,OAfME,QAAO,CAAGN,IAAI,CAACvY,MAerB,CAdI4Y,WAAW,CAAG,CAclB,CAbMD,MAAM,CAAG,EAaf,CAAS7Y,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG+Y,OAApB,CAA6B/Y,CAAC,EAA9B,CACCxD,gBAAgB,CAACic,IAAI,CAACzY,CAAD,CAAL,CAAUA,CAAV,CAAa0Y,eAAb,CAA8BV,aAA9B,CAEpB,CAGD;AACApb,OAAO,CAACoc,YAAR,CAAuB,CAAC9N,MAAD,CAASiD,KAAT,GAAmB,IAChC8K,gBAAe,CAAG7O,IAAI,CAAC8O,KAAL,CAAW/K,KAAK,CAAC,CAAjB,CADc,CAEhCgL,SAAS,CAAGhL,KAAK,CAAC,CAFc,CAGlCiL,SAAS,CAAG,CAHsB,CAIrB,CAAb,EAAAD,SAJkC,CAMlCC,SAAS,CAAGlO,MAAM,CAAC+N,eAAD,CAAN,CAAwBpF,CANF,CAQhB,CAAb,EAAAsF,SAR6B,CAUlCC,SAAS,CAAGlO,MAAM,CAAC+N,eAAD,CAAN,CAAwBnF,CAVF,CAYhB,CAAb,EAAAqF,SAZ6B,GAclCC,SAAS,CAAGlO,MAAM,CAAC+N,eAAD,CAAN,CAAwB1Y,CAdF,EAgBtC,GAAM8Y,QAAO,CAAG,GAAI3c,MAAK,CAACsC,KAAV,CAAgBoa,SAAhB,CAAhB,CACA,MAAO,CAACC,OAAO,CAACxF,CAAT,CAAYwF,OAAO,CAACvF,CAApB,CAAuBuF,OAAO,CAAC9Y,CAA/B,CACV,C,CAGD3D,OAAO,CAAC0c,+BAAR,CAA0C,CAACjc,QAAD,CAAWkc,cAAX,GAA8B,CACpE,GAAIlc,QAAQ,EAAIA,QAAQ,CAACoI,WAArB,EAAkE,CAA9B,CAAApI,QAAQ,CAACoI,WAAT,CAAqBvF,MAA7D,CAA0E,CAIxE,OAHIgI,MAAK,CAAG,EAGZ,CAFIzC,WAAW,CAAGpI,QAAQ,CAACoI,WAE3B,CADMuT,YAAY,CAAG/d,mBAAO,CAAC,CAAD,CAAP,CAAuB+d,YAC5C,CAAUhZ,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGnN,WAAW,CAACvF,MAAjC,CAAyCF,CAAC,CAAG4S,CAA7C,CAAgD5S,CAAC,EAAjD,CAAuD,CAGvD,OAFMwZ,WAAU,CAAG/T,WAAW,CAAEzF,CAAF,CAE9B,CADMkW,UAAU,CAAG,EACnB,CAAUxJ,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGrP,QAAQ,CAAC4C,KAAT,CAAeC,MAApC,CAA4CwM,CAAC,EAA7C,CAAmD,IAC3CH,KAAI,CAAGlP,QAAQ,CAAC4C,KAAT,CAAeyM,CAAf,CADoC,CAE3CxO,KAAK,CAAG8a,YAAY,CAACQ,UAAU,CAACtO,MAAZ,CAAoBqB,IAAI,CAAClM,CAAzB,CAFuB,CAG/C6V,UAAU,CAACxV,IAAX,CAAgBxC,KAAK,CAAC,CAAD,CAArB,CAA0BA,KAAK,CAAC,CAAD,CAA/B,CAAoCA,KAAK,CAAC,CAAD,CAAzC,CAH+C,CAI/CA,KAAK,CAAG8a,YAAY,CAACQ,UAAU,CAACtO,MAAZ,CAAoBqB,IAAI,CAAChM,CAAzB,CAJ2B,CAK/C2V,UAAU,CAACxV,IAAX,CAAgBxC,KAAK,CAAC,CAAD,CAArB,CAA0BA,KAAK,CAAC,CAAD,CAA/B,CAAoCA,KAAK,CAAC,CAAD,CAAzC,CAL+C,CAM/CA,KAAK,CAAG8a,YAAY,CAACQ,UAAU,CAACtO,MAAZ,CAAoBqB,IAAI,CAAC9L,CAAzB,CAN2B,CAO/CyV,UAAU,CAACxV,IAAX,CAAgBxC,KAAK,CAAC,CAAD,CAArB,CAA0BA,KAAK,CAAC,CAAD,CAA/B,CAAoCA,KAAK,CAAC,CAAD,CAAzC,CACD,CACD,GAAI2X,UAAS,CAAG,GAAInZ,MAAK,CAACoZ,sBAAV,CAA8D,CAA5B,EAAwB,CAAxB,CAAAzY,QAAQ,CAAC4C,KAAT,CAAeC,MAAf,CAAlC,CAAiE,CAAjE,CAAhB,CACA2V,SAAS,CAAClS,IAAV,CAAiB6V,UAAU,CAAC7V,IAbyB,CAcrDuE,KAAK,CAACxH,IAAN,CAAYmV,SAAS,CAACI,SAAV,CAAqBC,UAArB,CAAZ,CACD,CACDqD,cAAc,CAAC7a,eAAf,OAA4CwJ,KAC7C,CACF,C,CAGDtL,OAAO,CAACuG,sCAAR,CAAiD,CAAC9F,QAAD,CAAWkc,cAAX,GAA8B,CAC7E,GAAIlc,QAAQ,EAAIA,QAAQ,CAACoI,WAArB,EAAkE,CAA9B,CAAApI,QAAQ,CAACoI,WAAT,CAAqBvF,MAA7D,CAA0E,CAIxE,OAHIgI,MAAK,CAAG,EAGZ,CAFIzC,WAAW,CAAGpI,QAAQ,CAACoI,WAE3B,CADMuT,YAAY,CAAG/d,mBAAO,CAAC,CAAD,CAAP,CAAuB+d,YAC5C,CAAUhZ,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGnN,WAAW,CAACvF,MAAjC,CAAyCF,CAAC,CAAG4S,CAA7C,CAAgD5S,CAAC,EAAjD,CAAuD,CAGvD,OACQ9B,MADR,CAFQsb,UAAU,CAAG/T,WAAW,CAAEzF,CAAF,CAEhC,CADQkW,UAAU,CAAG,EACrB,CAAUxJ,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAA8B,CAA3B,CAAA8M,UAAU,CAACtO,MAAX,CAAkBhL,MAAvC,CAAmDwM,CAAC,EAApD,CACQxO,KADR,CACgB8a,YAAY,CAACQ,UAAU,CAACtO,MAAZ,CAAoBwB,CAApB,CAD5B,CAEIwJ,UAAU,CAACxV,IAAX,CAAgBxC,KAAK,CAAC,CAAD,CAArB,CAA0BA,KAAK,CAAC,CAAD,CAA/B,CAAoCA,KAAK,CAAC,CAAD,CAAzC,CAFJ,CAIE,GAAM2X,UAAS,CAAG,GAAInZ,MAAK,CAACoZ,sBAAV,CAAkCI,UAAlC,CAA8C,CAA9C,CAAlB,CACAL,SAAS,CAAClS,IAAV,CAAiB6V,UAAU,CAAC7V,IARyB,CASrDuE,KAAK,CAACxH,IAAN,CAAYmV,SAAZ,CACD,CACD0D,cAAc,CAAC7a,eAAf,OAA4CwJ,KAC7C,CACF,C,CAEDtL,OAAO,CAAC+U,aAAR,CAAwB,SAAEtU,QAAF,CAAkC,IAAtBoc,UAAsB,wDAAV,IAAU,CAExDA,SAAS,CAAGrP,IAAI,CAAC7K,GAAL,CAAUka,SAAV,CAAqBC,MAAM,CAACC,OAA5B,CAF4C,CAqBxD;AACA,OACQhW,KADR,CAhBIiW,WAAW,CAAG,EAgBlB,CAfIvH,OAAO,CAAGhV,QAAQ,CAACwc,QAAT,EAed,CAdItE,SAAS,CAAGlY,QAAQ,CAAC2H,YAAT,CAAuB,UAAvB,CAchB,CAbI8U,WAAW,CAAGzH,OAAO,CAAGA,OAAO,CAACrK,KAAX,CAAmBuN,SAAS,CAACvN,KAatD,CAVI+R,SAAS,CAAG,CAUhB,CAPIC,cAAc,CAAGjZ,MAAM,CAACkZ,IAAP,CAAa5c,QAAQ,CAACY,UAAtB,CAOrB,CANIic,UAAU,CAAG,EAMjB,CALIC,gBAAgB,CAAG,EAKvB,CAJIC,UAAU,CAAG,EAIjB,CAHIC,OAAO,CAAG,CAAE,MAAF,CAAU,MAAV,CAAkB,MAAlB,CAA0B,MAA1B,CAGd,CAAUra,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGoH,cAAc,CAAC9Z,MAApC,CAA4CF,CAAC,CAAG4S,CAAhD,CAAmD5S,CAAC,EAApD,CAA0D,CAClD2D,IADkD,CAC3CqW,cAAc,CAAEha,CAAF,CAD6B,CAGtDka,UAAU,CAAEvW,IAAF,CAAV,CAAqB,EAHiC,CAKtD,GAAI2W,UAAS,CAAGjd,QAAQ,CAACqB,eAAT,CAA0BiF,IAA1B,CAAhB,CACK2W,SANiD,GAQlDH,gBAAgB,CAAExW,IAAF,CAAhB,CAA+B+L,KAAJ,CAAW4K,SAAS,CAACpa,MAArB,EAA8Bqa,IAA9B,GAAqCtb,GAArC,CAA0C,IAAM,EAAhD,CARuB,CAYzD,CAED;AAGA,OAFIub,aAAY,CAAGpQ,IAAI,CAACqQ,KAAL,CAAY,EAAIhB,SAAhB,CAEnB,CADIiB,eAAe,CAAGtQ,IAAI,CAAC6H,GAAL,CAAU,EAAV,CAAcuI,YAAd,CACtB,CAAUxa,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG8Z,WAArB,CAAkC9Z,CAAC,EAAnC,CAAyC,CAMrC,OAJImO,MAAK,CAAGkE,OAAO,CAAGA,OAAO,CAAC5D,IAAR,CAAczO,CAAd,CAAH,CAAuBA,CAI1C,CADIyT,IAAI,CAAG,EACX,CAAU/G,CAAC,CAAG,CAAd,CAAiBkG,CAAC,CAAGoH,cAAc,CAAC9Z,MAApC,CAA4CwM,CAAC,CAAGkG,CAAhD,CAAmDlG,CAAC,EAApD,CAMI,OAJI/I,KAAI,CAAGqW,cAAc,CAAEtN,CAAF,CAIzB,CAHImJ,SAAS,CAAGxY,QAAQ,CAAC2H,YAAT,CAAuBrB,IAAvB,CAGhB,CAFIgX,QAAQ,CAAG9E,SAAS,CAAC8E,QAEzB,CAAUpJ,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGoJ,QAArB,CAA+BpJ,CAAC,EAAhC,CAEI;AACAkC,IAAI,YAAQ,CAAE,EAAIoC,SAAS,CAAEwE,OAAO,CAAE9I,CAAF,CAAT,CAAT,CAA2BpD,KAA3B,EAAqCuM,eAAzC,CAAV,KAAJ,CAMR;AACA;AACA,GAAKjH,IAAI,GAAImG,YAAb,CAEIQ,UAAU,CAAC1Z,IAAX,CAAiBkZ,WAAW,CAAEnG,IAAF,CAA5B,CAFJ,KAIO,CAEH;AACA,IAAM,GAAI/G,EAAC,CAAG,CAAR,CAAWkG,CAAC,CAAGoH,cAAc,CAAC9Z,MAApC,CAA4CwM,CAAC,CAAGkG,CAAhD,CAAmDlG,CAAC,EAApD,CASI,OAEQkO,WAFR,CAPIjX,IAAI,CAAGqW,cAAc,CAAEtN,CAAF,CAOzB,CANImJ,SAAS,CAAGxY,QAAQ,CAAC2H,YAAT,CAAuBrB,IAAvB,CAMhB,CALI2W,SAAS,CAAGjd,QAAQ,CAACqB,eAAT,CAA0BiF,IAA1B,CAKhB,CAJIgX,QAAQ,CAAG9E,SAAS,CAAC8E,QAIzB,CAHIE,QAAQ,CAAGX,UAAU,CAAEvW,IAAF,CAGzB,CAFImX,cAAc,CAAGX,gBAAgB,CAAExW,IAAF,CAErC,CAAU4N,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGoJ,QAArB,CAA+BpJ,CAAC,EAAhC,CAKI,GAHIqJ,UAGJ,CAHiBP,OAAO,CAAE9I,CAAF,CAGxB,CAFAsJ,QAAQ,CAACna,IAAT,CAAemV,SAAS,CAAE+E,UAAF,CAAT,CAAyBzM,KAAzB,CAAf,CAEA,CAAKmM,SAAL,CAEI,IAAM,GAAIS,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAGV,SAAS,CAACpa,MAAhC,CAAwC6a,CAAC,CAAGC,EAA5C,CAAgDD,CAAC,EAAjD,CAEID,cAAc,CAAEC,CAAF,CAAd,CAAoBra,IAApB,CAA0B4Z,SAAS,CAAES,CAAF,CAAT,CAAgBH,UAAhB,EAA8BzM,KAA9B,CAA1B,EAUhByL,WAAW,CAAEnG,IAAF,CAAX,CAAsBsG,SA/BnB,CAgCHK,UAAU,CAAC1Z,IAAX,CAAiBqZ,SAAjB,CAhCG,CAiCHA,SAAS,EAEZ,CAEJ,CAED;AACA;AAEA,OADMlB,OAAM,CAAGxb,QAAQ,CAAC+F,KAAT,EACf,CAAUpD,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGoH,cAAc,CAAC9Z,MAApC,CAA4CF,CAAC,CAAG4S,CAAhD,CAAmD5S,CAAC,EAApD,CAA0D,IAIlD6V,UAJkD,CAElDlS,IAAI,CAAGqW,cAAc,CAAEha,CAAF,CAF6B,CAGlDib,YAAY,CAAG5d,QAAQ,CAAC2H,YAAT,CAAuBrB,IAAvB,CAHmC,CAMlDqS,MAAM,CAAG,GAAIiF,aAAY,CAAC/S,KAAb,CAAmB8D,WAAvB,CAAoCkO,UAAU,CAAEvW,IAAF,CAA9C,CANyC,CAoBtD;AACA,GAdKsX,YAAY,CAACC,4BAclB,CAZIrF,SAAS,CAAG,GAAInZ,MAAK,CAAC+Y,eAAV,CAA2BO,MAA3B,CAAmCiF,YAAY,CAACN,QAAhD,CAA0DM,YAAY,CAACN,QAAvE,CAYhB,EARI9E,SAAS,CAAGxY,QAAQ,CAAC2H,YAAT,CAAuBrB,IAAvB,EAA8BP,KAA9B,EAQhB,CAPIyS,SAAS,CAACsF,QAAV,CAAoBnF,MAApB,CAOJ,EAHA6C,MAAM,CAAC9T,YAAP,CAAqBpB,IAArB,CAA2BkS,SAA3B,CAGA,CAAKlS,IAAI,GAAIwW,iBAAb,CAEI,IAAM,GAEE/V,eAFF,CAAIsI,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGyN,gBAAgB,CAAExW,IAAF,CAAhB,CAAyBzD,MAA9C,CAAsDwM,CAAC,EAAvD,CAEQtI,cAFR,CAEyB/G,QAAQ,CAACqB,eAAT,CAA0BiF,IAA1B,EAAkC+I,CAAlC,EAAsCtJ,KAAtC,EAFzB,CAGIgB,cAAc,CAAC+W,QAAf,CAAyB,GAAI/W,eAAc,CAAC8D,KAAf,CAAqB8D,WAAzB,CAAsCmO,gBAAgB,CAAExW,IAAF,CAAhB,CAA0B+I,CAA1B,CAAtC,CAAzB,CAHJ,CAIImM,MAAM,CAACna,eAAP,CAAwBiF,IAAxB,EAAgC+I,CAAhC,EAAsCtI,cAMjD,CAED;AACA,GAAIgX,KAAI,CAAGC,UAAX,CACKjB,UAAU,CAACla,MAAX,EAAqBkK,IAAI,CAAC6H,GAAL,CAAU,CAAV,CAAa,CAAb,CAjJ8B,GAiJXmJ,IAAI,CAAGE,WAjJI,EAkJnDlB,UAAU,CAACla,MAAX,EAAqBkK,IAAI,CAAC6H,GAAL,CAAU,CAAV,CAAa,EAAb,CAlJ8B,GAkJVmJ,IAAI,CAAGG,WAlJG,KAoJpDC,eAAc,CAAG,GAAIJ,KAAJ,CAAUhB,UAAV,CApJmC,CAqJpDA,UAAU,CAAG,IArJuC,CAmKxD,MAbiB,KAAZ,GAAA/H,OAaL,CAXI+H,UAAU,CAAG,GAAI1d,MAAK,CAAC+Y,eAAV,CAA2B+F,cAA3B,CAA2C,CAA3C,CAWjB,EAPIpB,UAAU,CAAG/c,QAAQ,CAACwc,QAAT,GAAoBzW,KAApB,EAOjB,CANIgX,UAAU,CAACe,QAAX,CAAqBK,cAArB,CAMJ,EAFA3C,MAAM,CAACzC,QAAP,CAAiBgE,UAAjB,CAEA,CAAOvB,MAEV,C,CAED,QAAS4C,YAAT,CAAqBte,UAArB,CAAiC,CAChC,GAAIA,UAAU,CAACue,mBAAf,CAAoC,CACnC,GAAIhe,SAAQ,CAAG,GAAIhB,MAAK,CAACif,gBAAV,CAA2B,CACzCzd,KAAK,CAAGf,UAAU,CAACe,KAAX,CAAiBkF,KAAjB,EADiC,CAEzCxF,YAAY,CAAGT,UAAU,CAACS,YAFe,CAGzCG,YAAY,CAAGZ,UAAU,CAACY,YAHe,CAIzCS,YAAY,CAAGrB,UAAU,CAACqB,YAJe,CAKzCH,WAAW,CAAGlB,UAAU,CAACkB,WALgB,CAMzCZ,OAAO,CAAGN,UAAU,CAACM,OANoB,CAOzCa,IAAI,CAAGnB,UAAU,CAACmB,IAPuB,CAA3B,CAAf,CAWA,MAFInB,WAAU,CAAC8B,GAEf,GADCvB,QAAQ,CAACuB,GAAT,CAAe9B,UAAU,CAAC8B,GAC3B,EAAOvB,QACP,CAED,MAAOP,WACP,CAGDP,OAAO,CAAC8a,UAAR,CAAqBA,U,CACrB9a,OAAO,CAACJ,gBAAR,CAA2BA,gB,CAC3BI,OAAO,CAACH,iBAAR,CAA4BA,iB,CAC5BG,OAAO,CAAC6e,WAAR,CAAsBA,W;;;;;;GChUlB/e,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACb2gB,WAAW,CAAG,GAAIC,MAAJ,CAAU,GAAV,CAAe,GAAf,C,CACpBD,WAAW,CAACE,GAAZ,CAAkB7gB,mBAAO,CAAC,CAAD,C,CACzB,GAAM8gB,QAAO,CAAG,GAAIrf,MAAK,CAACsf,OAA1B,CACAD,OAAO,CAACE,KAAR,CAAgBL,W,CAChBG,OAAO,CAAClY,WAAR,G,IACMqY,KAAI,CAAG,CAAC,IAAD,CAAQ,GAAR,CAAc,CAAd,C,CAWP9S,MAAM,CAAG,SAAS+S,UAAT,CAAqB,CACjClhB,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CADkC,CAElC,KAAKif,OAAL,CAAeA,OAFmB,IAG9BK,eAAc,OAHgB,CAI9BC,MAAM,OAJwB,CAKlC,KAAK/e,KAAL,CAAa,GAAIZ,MAAK,CAAC4f,KALW,CAMlC,KAAKC,MAAL,CAAcJ,UANoB,CAOlC,KAAKK,QAAL,GAPkC,IAQ9BjJ,QAAO,GARuB,CAS9B9F,MAAM,CAAG,GAAI/Q,MAAK,CAAC4F,OATW,CAY/Bma,UAAU,CAAG,IAAM,CACpBL,cAAc,CAAG,GAAI1f,MAAK,CAACggB,cAAV,CAAyB,CACxCzd,GAAG,CAAE8c,OADmC,CAExCY,SAAS,CAAE,EAF6B,CAGxCte,WAAW,GAH6B,CAIxCue,SAAS,GAJ+B,CAKxCC,UAAU,GAL8B,CAMxCC,eAAe,GANyB,CAAzB,CADG,CASpBT,MAAM,CAAG,GAAI3f,MAAK,CAACqgB,MAAV,CAAiBX,cAAjB,CATW,CAUpBC,MAAM,CAAC1U,MAAP,CAAckB,GAAd,CAAkB,EAAlB,CAAuB,CAAvB,CAVoB,CAWpB,KAAKvL,KAAL,CAAWwG,GAAX,CAAeuY,MAAf,CAXoB,CAYpB,KAAK/e,KAAL,CAAW+G,QAAX,CAAoBwE,GAApB,CAAwB,CAAxB,CAA2B,CAA3B,CAA8B,CAA9B,CAZoB,CAapB,KAAKvL,KAAL,CAAWoG,WAAX,CAAyB,GAbL,CAcpB2Y,MAAM,CAAC/O,KAAP,CAAazE,GAAb,CAAiBqT,IAAI,CAAC,CAAD,CAArB,CAA0BA,IAAI,CAAC,CAAD,CAA9B,CAAmCA,IAAI,CAAC,CAAD,CAAvC,CAdoB,CAepBG,MAAM,CAACva,QAAP,CAAkB,IACnB,CA5BiC,CAkDlC;;;;;;KAlDkC,CA6DjC;;;;KA7DiC,CAuElC;;KAvEkC,CA0FlC;;KA1FkC,CAkGlC;;KAlGkC,CA0GnC;AA5EC,KAAK+H,YAAL,CAAoB,CAACpK,GAAD,CAAMF,GAAN,GAAc,IAC5B+N,MAAK,CAAG,CADoB,CAE5B7P,OAAO,CAAG,CAFkB,CAG5Buf,UAAU,CAAG,CAHe,CAI5Bvd,GAAG,GAAKF,GAJoB,GAK9Byd,UAAU,CAAI,EAAI,CAACvP,MAAM,CAACnE,CAAP,CAAW7J,GAAZ,GAAoBF,GAAG,CAAGE,GAA1B,CALY,CAM9B6N,KAAK,CAAG,GAAoB,EAAb,CAAA0P,UANe,CAO9Bvf,OAAO,CAAG,GAAoB,EAAb,CAAAuf,UAPa,EAShCX,MAAM,CAAC3e,QAAP,CAAgBD,OAAhB,CAA0BA,OATM,CAUhC,KAAKwf,aAAL,CAAmB3P,KAAnB,CACD,CAzCiC,CA2ClC,KAAK7D,SAAL,CAAiBF,MAAM,GACrBkE,MAAM,CAAC8B,IAAP,CAAY,KAAKjS,KAAL,CAAW+G,QAAvB,CADqB,CAErBoJ,MAAM,CAACtD,OAAP,CAAeZ,MAAf,CAFqB,CAGrBkE,MAAM,CAACnE,CAAP,CAAWc,IAAI,CAAC3K,GAAL,CAAS2K,IAAI,CAAC7K,GAAL,CAASkO,MAAM,CAACnE,CAAhB,CAAmB,CAAnB,CAAT,CAAgC,CAAhC,CAHU,CAIdmE,MAAM,CAACnE,CAJO,CA3CW,CAyDlC,KAAKD,WAAL,CAAmB,CAACzJ,CAAD,CAAIC,CAAJ,CAAOyJ,CAAP,GAAa,CAC9B,KAAKhM,KAAL,CAAW+G,QAAX,CAAoBwE,GAApB,CAAwBjJ,CAAxB,CAA2BC,CAA3B,CAA8ByJ,CAA9B,CACD,CA3DiC,CAkElC,KAAK2T,aAAL,CAAqBf,IAAI,EAAI,CAC3BG,MAAM,CAAC/O,KAAP,CAAazE,GAAb,CAAiB,IAAjB,CAAwB,GAAxB,CAA8B,CAA9B,CAD2B,CAE3BwT,MAAM,CAAC/O,KAAP,CAAa/E,cAAb,CAA4B2T,IAA5B,CACD,CArEiC,CA0ElC,KAAK3U,OAAL,CAAe,IAAM,CACf,KAAKjK,KADU,EAEjB,KAAKA,KAAL,CAAWiK,OAAX,EAFiB,CAIf6U,cAJe,EAKjBA,cAAc,CAAC7U,OAAf,EALiB,CAOf8U,MAPe,EAQjBA,MAAM,CAAC9U,OAAP,EAEH,CApFiC,CAsFlC,KAAK2B,SAAL,CAAiB,IACRqK,OAvFyB,CA6FlC,KAAK5J,MAAL,CAAc,IAAM,CAClB4J,OAAO,GADW,CAElB,KAAKjW,KAAL,CAAWgJ,OAAX,GACD,CAhGiC,CAqGlC,KAAK6C,OAAL,CAAe,IAAM,CACnBoK,OAAO,GADY,CAEnB,KAAKjW,KAAL,CAAWgJ,OAAX,GACD,CAxGiC,CA2GnCmW,UAAU,EAEV,C,CAtHD;;;;;;;;GAwHArT,MAAM,CAACtI,SAAP,CAAmBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CACnBlE,OAAO,CAACwM,MAAR,CAAiBA,M;;;;;;ACjIjB,qCAAqC,gjC;;;;;;ACCrC;;GAGAxM,OAAO,CAACgC,iBAAR,CAA4B,UAAW,CACnC,MAAO,UAASse,MAAT,CAAiB,CACpBA,MAAM,CAACC,YAAP,CAAsBD,MAAM,CAACC,YAAP,CAAoBC,OAApB,CAClB,8BADkB,CAElB,CACC,sBADD,CAEI,6BAFJ,CAGI,6BAHJ,EAIEC,IAJF,CAIQ,IAJR,CAFkB,CADF,CASpBH,MAAM,CAACC,YAAP,CAAsBD,MAAM,CAACC,YAAP,CAAoBC,OAApB,CAClB,yBADkB,CAElB,CACI,yBADJ,CAEI,yBAFJ,CAGI,oDAHJ,CAII,qDAJJ,CAKI,QALJ,EAMEC,IANF,CAMQ,IANR,CAFkB,CAUzB,CACJ,C;;;;;;GCzBK3gB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAcfO,KAAK,CAAG,SAAU6B,QAAV,CAAoBF,UAApB,CAAgCmgB,IAAhC,CAAsCC,UAAtC,CAAkD,CAC7DtiB,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CAD8D,CAE9D,GAAIY,SAAJ,CACIP,UAH0D,GAI5DO,QAAQ,CAAGP,UAAU,CAACiG,KAAX,EAJiD,CAK5D1F,QAAQ,CAACc,YAAT,CAAwB9B,KAAK,CAAC8gB,UAL8B,EAQ9D,KAAKrK,EAAL,CAAUmK,IARoD,IAS1DG,MAAK,OATqD,CAU1DC,WAAW,OAV+C,CAWxDnP,KAAK,CAAG,GAAI7R,MAAK,CAAC4f,KAXsC,CAc9D;;;;;KAd8D,CAkC9D;;;;KAlC8D,CA2C9D;;;KA3C8D,CAyD9D;;;;KAzD8D,CA6E9D;;;KA7E8D,CAqF9D;;;KArF8D,CA6F9D;;;KA7F8D,CAqG9D;;;;;;;;;;KArG8D,CAwI9D;;;;KAxI8D,CAqJ9D;;KAzIA,KAAKqB,OAAL,GAZ8D,CAoB9D,KAAKC,QAAL,CAAgBC,MAAM,KAChBA,MAAM,EAAIA,MAAM,CAACnM,MADD,IAElB,KAAKpU,KAAL,CAAaugB,MAAM,CAACza,KAAP,EAFK,CAGlB,KAAK9F,KAAL,CAAWwE,QAAX,CAAsB,IAHJ,CAIlByM,KAAK,CAACzK,GAAN,CAAU,KAAKxG,KAAf,CAJkB,IApBwC,CA8B1DD,QAAQ,EAAIK,QA9B8C,EA+B5D,KAAKkgB,QAAL,CAAc,GAAIlhB,MAAK,CAACyC,IAAV,CAAe9B,QAAf,CAAyBK,QAAzB,CAAd,CA/B4D,CAuC9D,KAAKogB,WAAL,CAAmB,UAAY,CAC7B,MAjCaP,WAkCd,CAzC6D,CA+C9D,KAAKQ,QAAL,CAAgBpF,IAAI,EAAI,CAClBA,IAAI,GAAqB,QAAhB,QAAOA,KAAP,EAA4BA,IAAI,WAAYqF,OAAjD,CADc,GAEpBN,WAAW,CAAG/E,IAFM,CAGhB,KAAKrb,KAHW,GAIlB,KAAKA,KAAL,CAAWqG,IAAX,CAAkBgV,IAJA,GAMlB8E,KANkB,EAOpB,KAAKQ,SAAL,EACH,CAvD6D,CA8D9D,KAAKA,SAAL,CAAkB7f,MAAD,EAAY,CAO3B,GANIqf,KAMJ,GALEpZ,QAAQ,CAAGoZ,KAAK,CAACS,WAAN,EAKb,CAJE3P,KAAK,CAACvK,MAAN,CAAayZ,KAAK,CAACU,SAAN,EAAb,CAIF,CAHEV,KAAK,CAAClW,OAAN,EAGF,CAFEkW,KAAK,OAEP,EAAIC,WAAW,GAA4B,QAAvB,QAAOA,YAAP,EAAmCA,WAAW,WAAYM,OAA/D,CAAf,CAAuF,CACrF,GAAI3Z,UAAQ,CAAG,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAAf,CACAoZ,KAAK,CAAG,IAAKxiB,mBAAO,CAAC,EAAD,CAAP,CAAmBmjB,KAAxB,EAA+BV,WAA/B,CAA4Ctf,MAA5C,CAF6E,CAGrFqf,KAAK,CAACpU,WAAN,CAAkBhF,SAAQ,CAAC,CAAD,CAA1B,CAA+BA,SAAQ,CAAC,CAAD,CAAvC,CAA4CA,SAAQ,CAAC,CAAD,CAApD,CAHqF,CAIrFkK,KAAK,CAACzK,GAAN,CAAU2Z,KAAK,CAACU,SAAN,EAAV,CACD,CACF,CA3E6D,CAiF9D,KAAKE,QAAL,CAAgB,IACP9P,KAlFqD,CAyF9D,KAAK+P,QAAL,CAAgB,IACPZ,WA1FqD,CAiG9D,KAAKa,OAAL,CAAe,IACN,KAAKjhB,KAlGgD,CAgH9D,KAAKkhB,iBAAL,CAAyB,CAACna,QAAD,CAAWoa,KAAX,CAAkBC,KAAlB,CAAyBC,KAAzB,GAAmC,CACtD,KAAKrhB,KADiD,GAExD,KAAKA,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCH,KAAK,CAAC,CAAD,CAFmB,CAGxD,KAAKnhB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCH,KAAK,CAAC,CAAD,CAHmB,CAIxD,KAAKnhB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCH,KAAK,CAAC,CAAD,CAJmB,CAKxD,KAAKnhB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgC,CALwB,CAMxD,KAAKthB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCF,KAAK,CAAC,CAAD,CANmB,CAOxD,KAAKphB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCF,KAAK,CAAC,CAAD,CAPmB,CAQxD,KAAKphB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCF,KAAK,CAAC,CAAD,CARmB,CASxD,KAAKphB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgC,CATwB,CAUxD,KAAKthB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCD,KAAK,CAAC,CAAD,CAVmB,CAWxD,KAAKrhB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,CAA3B,EAAgCD,KAAK,CAAC,CAAD,CAXmB,CAYxD,KAAKrhB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,EAA3B,EAAiCD,KAAK,CAAC,CAAD,CAZkB,CAaxD,KAAKrhB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,EAA3B,EAAiC,CAbuB,CAcxD,KAAKthB,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,EAA3B,EAAiCva,QAAQ,CAAC,CAAD,CAde,CAexD,KAAK/G,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,EAA3B,EAAiCva,QAAQ,CAAC,CAAD,CAfe,CAgBxD,KAAK/G,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,EAA3B,EAAiCva,QAAQ,CAAC,CAAD,CAhBe,CAiBxD,KAAK/G,KAAL,CAAW2O,MAAX,CAAkB2S,QAAlB,CAA2B,EAA3B,EAAiC,CAjBuB,CAkBxD,KAAKthB,KAAL,CAAWuH,gBAAX,GAlBwD,EAoBtD4Y,KApBsD,EAqBxDA,KAAK,CAACpU,WAAN,CAAkBhF,QAAQ,CAAC,CAAD,CAA1B,CAA+BA,QAAQ,CAAC,CAAD,CAAvC,CAA4CA,QAAQ,CAAC,CAAD,CAApD,CACH,CAtI6D,CA6I9D,KAAK2C,SAAL,CAAkB9I,KAAD,EAAW,CACtBuf,KADsB,EAExBA,KAAK,CAACzW,SAAN,CAAgB9I,KAAhB,CAFwB,CAGtB,KAAKmD,aAAL,EAAsB,KAAKA,aAAL,CAAmB3D,QAHnB,GAIxB,KAAK2D,aAAL,CAAmB3D,QAAnB,CAA4BQ,KAA5B,CAAoCE,MAJZ,EAK1B,KAAKf,QAAL,CAAcgG,gBAAd,GACD,CAnJ6D,CAwJ9D,KAAKkE,OAAL,CAAe,IAAM,CACf,KAAK7J,QADU,EAEjB,KAAKA,QAAL,CAAc6J,OAAd,EAFiB,CAGnB,KAAKjK,KAAL,OACD,CACF,C,CAzKD;;;;;;;;;;;GA2KA9B,KAAK,CAACsF,SAAN,CAAkBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CAClBlE,OAAO,CAACpB,KAAR,CAAgBA,K;;;;;;AC9KhB,GAAMqjB,WAAU,CAAG5jB,mBAAO,CAAC,EAAD,CAAP,CAA4B6jB,OAA/C,CAEA;;;;;;;;;;GAWAliB,OAAO,CAACwhB,KAAR,CAAgB,SAAUW,MAAV,CAAkB3gB,MAAlB,CAA0B,IACpCua,KAAI,CAAGoG,MAD6B,CAEpC1C,MAAM,OAF8B,CAWxC;;;;;KAXwC,CAuBxC;;;;;;KAvBwC,CAmCxC;;;;KAnCwC,CA4CxC;;;;KA5CwC,CAsDxC;;KAtDwC,CA6DxC;;;;KA7DwC,CAsExC;;;;KAlEEA,MAJsC,CAGpCje,MAHoC,CAI7B,GAAIygB,WAAJ,CAAelG,IAAf,CAAqB,IAArB,CAA4Bva,MAAM,CAAC4gB,QAAP,EAA5B,CAJ6B,CAM7B,GAAIH,WAAJ,CAAelG,IAAf,CAAqB,IAArB,CAN6B,CAOxC0D,MAAM,CAAC3e,QAAP,CAAgBof,eAAhB,GAPwC,CAQxCT,MAAM,CAAC1U,MAAP,CAAc/H,CAAd,CAAkB,CAAC,GARqB,CASxCyc,MAAM,CAAC1U,MAAP,CAAc9H,CAAd,CAAkB,CATsB,CAiBxC,KAAKqe,WAAL,CAAmB,IACb7B,MADa,CAER,CAACA,MAAM,CAAChY,QAAP,CAAgBzE,CAAjB,CAAoByc,MAAM,CAAChY,QAAP,CAAgBxE,CAApC,CAAuCwc,MAAM,CAAChY,QAAP,CAAgBiF,CAAvD,CAFQ,CAGV,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CApB+B,CA8BxC,KAAKD,WAAL,CAAmB,CAACzJ,CAAD,CAAIC,CAAJ,CAAOyJ,CAAP,GAAa,CAC1B+S,MAD0B,EAE5BA,MAAM,CAAChY,QAAP,CAAgBwE,GAAhB,CAAoBjJ,CAApB,CAAuBC,CAAvB,CAA0ByJ,CAA1B,CACH,CAjCuC,CAwCxC,KAAKtC,SAAL,CAAiB5I,MAAM,EAAI,CACzBie,MAAM,CAACne,KAAP,CAAeE,MAAM,CAAC4gB,QAAP,EAChB,CA1CuC,CAiDxC,KAAKC,QAAL,CAAgBC,OAAO,EAAI,CACrB7C,MAAM,EAAc,CAAV,CAAA6C,OADW,EAEvB7C,MAAM,CAAC/O,KAAP,CAAazE,GAAb,CAAiBqW,OAAjB,CAA0BA,OAA1B,CAAmC,CAAnC,CACH,CApDuC,CAyDxC,KAAK3X,OAAL,CAAe,IAAM,CACnB8U,MAAM,CAAC9U,OAAP,EACD,CA3DuC,CAkExC,KAAK4W,SAAL,CAAiB,IACR9B,MAnE+B,CA2ExC,KAAK8C,SAAL,CAAiB,IACRxG,IAGV,C;;;;;;AC5FD,6C;;;;;;8ECAMjc,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfmkB,UAAU,CAAGnkB,mBAAO,CAAC,EAAD,CAAP,CAAiCmkB,U,CAY9C3jB,QAAQ,CAAG,UAAY,CAC1BR,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CAD2B,IAErBuiB,UAAS,CAAG,EAFS,CAGvBC,MAAM,OAHiB,CAIvBC,MAAM,OAJiB,CAKvBC,MAAM,OALiB,CAMvBjK,SAAS,OANc,CAOvBkK,MAAM,OAPiB,CAQvBvU,MAAM,OARiB,CASvBwU,MAAM,OATiB,CAUvBC,iBAAiB,CAAG,CAVG,CAWvBC,gBAAgB,CAAG,CAXI,CAYvBC,QAAQ,CAAG,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAZY,CAavBngB,MAAM,CAAG,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAbc,CAcvBogB,YAAY,CAAG,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAdQ,CAevBC,WAAW,CAAG,MAfS,CAgB3B,KAAKC,KAAL,GAhB2B,IAiBvBC,aAAY,GAjBW,CAkBvBC,aAAa,GAlBU,CAmB3B,KAAKC,UAAL,GAnB2B,CAkC3B,OAdIC,iBAAgB,CAAG,GAAI1jB,MAAK,CAACiO,OAcjC,CAbM0V,WAAW,CAAG,GAAI3jB,MAAK,CAACsC,KAa9B,CAZMshB,WAAW,CAAG,GAAI5jB,MAAK,CAACsC,KAY9B,CAXMuhB,aAAa,CAAG,GAAI7jB,MAAK,CAAC0F,IAWhC,CAVMoe,aAAa,CAAG,GAAI9jB,MAAK,CAAC0F,IAUhC,CATMqe,aAAa,CAAG,GAAI/jB,MAAK,CAAC0F,IAShC,CARMse,OAAO,CAAG,EAQhB,CAPMC,kBAAkB,CAAG,EAO3B,CANMC,eAAe,CAAG,EAMxB,CALMC,eAAe,CAAG,EAKxB,CAJMC,eAAe,CAAG,EAIxB,CAHMC,eAAe,CAAG,EAGxB,CAFMC,eAAe,CAAG,EAExB,CADMC,iBAAiB,CAAG,EAC1B,CAASjhB,CAAC,CAAG,CAAb,CAAoB,CAAJ,CAAAA,CAAhB,CAAuBA,CAAC,EAAxB,CACE0gB,OAAO,CAAC1gB,CAAD,CAAP,CAAa,GAAItD,MAAK,CAAC4F,OAAvB,CAGF;;;KAIA,KAAK+b,QAAL,CAAgB,IACP,KAAK/gB,KA3Ca,CAyD3B,KAAK4jB,IAAL,CAAY,CAACC,YAAD,CAAeC,QAAf,CAAyBC,cAAzB,CAAyCC,QAAzC,CAAmDC,aAAnD,GAAqE,CAC/EjC,MAAM,CAAG6B,YAAY,CAAC1C,KADyD,CAE/Ec,MAAM,CAAG4B,YAAY,CAACzC,KAFyD,CAG/Ec,MAAM,CAAG2B,YAAY,CAACxC,KAHyD,CAI/EpJ,SAAS,CAAG4L,YAAY,CAAC5L,SAJsD,CAK/EkK,MAAM,CAAG0B,YAAY,CAAC7T,KALyD,CAM/EpC,MAAM,CAAGiW,YAAY,CAACjW,MANyD,CAO/EwU,MAAM,CAAGyB,YAAY,CAAC1D,KAPyD,CAQ/EwC,YAAY,CAAGkB,YAAY,CAAC/M,QAAb,CAAsBoN,YAR0C,CAS/EtB,aAAa,CAAGiB,YAAY,CAAC/M,QAAb,CAAsBqN,aATyC,CAU/E9B,iBAAiB,CAAGwB,YAAY,CAAC/M,QAAb,CAAsBsN,oBAVqC,CAW/E3B,WAAW,CAAGoB,YAAY,CAAC/M,QAAb,CAAsB2L,WAX2C,CAY/EH,gBAAgB,CAAGuB,YAAY,CAAC/M,QAAb,CAAsBuN,kBAZsC,CAa5D,SAAf,EAAA5B,WAAW,EAAgC,QAAf,EAAAA,WAb+C,CAc7EH,gBAd6E,EAcvC,CAduC,CAevD,SAAf,EAAAG,WAfsE,GAgB7EH,gBAhB6E,EAgBvC,CAhBuC,EAiB/EC,QAAQ,CAAGsB,YAAY,CAAC/M,QAAb,CAAsBwN,SAjB8C,CAkB/EliB,MAAM,CAAGyhB,YAAY,CAAC/M,QAAb,CAAsB1U,MAlBgD,CAmB/EogB,YAAY,CAAGqB,YAAY,CAAC/M,QAAb,CAAsByN,aAnB0C,CAoB/E,GAAMC,OAAM,CAAG,GAAI1C,WAAnB,CAGA,GAFA,KAAK/hB,QAAL,CAAgB,GAAIX,MAAK,CAACsB,cAE1B,CADA,KAAKV,KAAL,CAAa,GAAIZ,MAAK,CAACqlB,aAAV,CAAwB,KAAK1kB,QAA7B,QAAkDuiB,gBAAlD,CACb,CAAI0B,QAAJ,CAAc,CACZ,GAAI1K,OAAM,CAAGkL,MAAM,CAACE,KAAP,CAAaZ,QAAb,CAAb,CACCa,UAAU,CAACZ,cAAD,CAAiBE,aAAjB,CAAX,CAA4C3K,MAAM,CAACvZ,QAAnD,CAA6DuZ,MAAM,CAACsL,SAApE,CAFY,CAGZtL,MAAM,CAACvZ,QAAP,CAAgBkK,OAAhB,EACD,CAJD,IAKEua,OAAM,CAACK,WAAP,CAAqB,WALvB,CAMEL,MAAM,CAACZ,IAAP,CAAYE,QAAZ,CAAsBa,UAAU,CAACZ,cAAD,CAAiBE,aAAjB,CAAhC,CAEH,CAxF0B,CA0F3B;;;;;KA1F2B,GAgGrBa,mBAAkB,CAAG,CAACzP,KAAD,CAAQ8L,KAAR,CAAeC,KAAf,CAAsBC,KAAtB,CAA6BrR,KAA7B,CAAoC+U,aAApC,GAAsD,CAC/E,GAAmB,MAAf,EAAAtC,WAAW,EAA6B,QAAf,EAAAA,WAA7B,CAAsD,CAUpD,OACMuC,KADN,CATIC,UAAU,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CASjB,CARIC,WAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAQlB,CAPIC,WAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAOlB,CANIC,WAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAMlB,CALIC,WAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAKlB,CAJMC,cAAc,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAIvB,CAHMC,cAAc,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAGvB,CAFMC,cAAc,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAEvB,CADMC,cAAc,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CACvB,CAASrW,CAAC,CAAG,CAAb,CAAoB,CAAJ,CAAAA,CAAhB,CAAuBA,CAAC,EAAxB,CACM4V,IADN,CACyB,CAAX,CAAAhV,KAAK,CAACZ,CAAD,CAAN,CAAmB,CAAC,CAApB,CAA0B,CADvC,CAEE6V,UAAU,CAAC7V,CAAD,CAAV,CAAgB4V,IAAI,CAAGzC,QAAQ,CAACnT,CAAD,CAAf,CAAqBY,KAAK,CAACZ,CAAD,CAAL,CAAWoT,YAAY,CAACpT,CAAD,CAF9D,CAIA,IAAK,GAAIA,EAAC,CAAG,CAAb,CAAoB,CAAJ,CAAAA,CAAhB,CAAuBA,CAAC,EAAxB,CACE8V,WAAW,CAAC9V,CAAD,CAAX,CAAiB+R,KAAK,CAAC/R,CAAD,CAAL,CAAW6V,UAAU,CAAC,CAAD,CADxC,CAEEE,WAAW,CAAC/V,CAAD,CAAX,CAAiBgS,KAAK,CAAChS,CAAD,CAAL,CAAW6V,UAAU,CAAC,CAAD,CAFxC,CAGEG,WAAW,CAAChW,CAAD,CAAX,CAAiBiS,KAAK,CAACjS,CAAD,CAAL,CAAW6V,UAAU,CAAC,CAAD,CAHxC,CAIEI,WAAW,CAACjW,CAAD,CAAX,CAAiBiG,KAAK,CAACjG,CAAD,CAAL,CACbhN,MAAM,CAAC,CAAD,CAAN,CAAY8iB,WAAW,CAAC9V,CAAD,CADV,CAEbhN,MAAM,CAAC,CAAD,CAAN,CAAY+iB,WAAW,CAAC/V,CAAD,CAFV,CAGbhN,MAAM,CAAC,CAAD,CAAN,CAAYgjB,WAAW,CAAChW,CAAD,CAP7B,CAQqB,QAAf,EAAAqT,WARN,GASI6C,cAAc,CAAClW,CAAD,CAAd,CAAoB,CAAC8V,WAAW,CAAC9V,CAAD,CATpC,CAUImW,cAAc,CAACnW,CAAD,CAAd,CAAoB,CAAC+V,WAAW,CAAC/V,CAAD,CAVpC,CAWIoW,cAAc,CAACpW,CAAD,CAAd,CAAoB,CAACgW,WAAW,CAAChW,CAAD,CAXpC,CAYIqW,cAAc,CAACrW,CAAD,CAAd,CAAoBiW,WAAW,CAACjW,CAAD,CAZnC,CAamB,CAAX,CAAAY,KAAK,CAAC,CAAD,CAbb,GAeMqV,WAAW,CAACjW,CAAD,CAAX,EAAkB8V,WAAW,CAAC9V,CAAD,CAfnC,CAgBMqW,cAAc,CAACrW,CAAD,CAAd,EAAqBkW,cAAc,CAAClW,CAAD,CAhBzC,GAoBA,2EACI,EACFgW,WAAW,CAAC,CAAD,CAAX,EAAkBF,WAAW,CAAC,CAAD,CAAX,CAAiBC,WAAW,CAAC,CAAD,CAA5B,CAChBD,WAAW,CAAC,CAAD,CAAX,CAAiBC,WAAW,CAAC,CAAD,CAD9B,EAEAC,WAAW,CAAC,CAAD,CAAX,EAAkBF,WAAW,CAAC,CAAD,CAAX,CAAiBC,WAAW,CAAC,CAAD,CAA5B,CAChBD,WAAW,CAAC,CAAD,CAAX,CAAiBC,WAAW,CAAC,CAAD,CAD9B,CAFA,CAIAC,WAAW,CAAC,CAAD,CAAX,EAAkBF,WAAW,CAAC,CAAD,CAAX,CAAiBC,WAAW,CAAC,CAAD,CAA5B,CAChBD,WAAW,CAAC,CAAD,CAAX,CAAiBC,WAAW,CAAC,CAAD,CAD9B,CAxCkD,GA0ClDC,WAAW,CAAC,CAAD,CAAX,CAAiB,CAACA,WAAW,CAAC,CAAD,CA1CqB,CA2ClDA,WAAW,CAAC,CAAD,CAAX,CAAiB,CAACA,WAAW,CAAC,CAAD,CA3CqB,CA4ClDA,WAAW,CAAC,CAAD,CAAX,CAAiB,CAACA,WAAW,CAAC,CAAD,CA5CqB,EA8CpDL,aAAa,CAAC,CAAD,CAAb,CAAmB,CAACM,WAAD,CAAcH,WAAd,CAA2BC,WAA3B,CAAwCC,WAAxC,CA9CiC,CA+CjC,QAAf,EAAA3C,WA/CgD,GAgD9C,EACF+C,cAAc,CAAC,CAAD,CAAd,EAAqBF,cAAc,CAAC,CAAD,CAAd,CAAoBC,cAAc,CAAC,CAAD,CAAlC,CACnBD,cAAc,CAAC,CAAD,CAAd,CAAoBC,cAAc,CAAC,CAAD,CADpC,EAEAC,cAAc,CAAC,CAAD,CAAd,EAAqBF,cAAc,CAAC,CAAD,CAAd,CAAoBC,cAAc,CAAC,CAAD,CAAlC,CACnBD,cAAc,CAAC,CAAD,CAAd,CAAoBC,cAAc,CAAC,CAAD,CADpC,CAFA,CAIAC,cAAc,CAAC,CAAD,CAAd,EAAqBF,cAAc,CAAC,CAAD,CAAd,CAAoBC,cAAc,CAAC,CAAD,CAAlC,CACnBD,cAAc,CAAC,CAAD,CAAd,CAAoBC,cAAc,CAAC,CAAD,CADpC,CArDgD,GAuDhDC,cAAc,CAAC,CAAD,CAAd,CAAoB,CAACA,cAAc,CAAC,CAAD,CAvDa,CAwDhDA,cAAc,CAAC,CAAD,CAAd,CAAoB,CAACA,cAAc,CAAC,CAAD,CAxDa,CAyDhDA,cAAc,CAAC,CAAD,CAAd,CAAoB,CAACA,cAAc,CAAC,CAAD,CAzDa,EA2DlDT,aAAa,CAAC,CAAD,CAAb,CAAmB,CAACU,cAAD,CAAiBH,cAAjB,CAAiCC,cAAjC,CAAiDC,cAAjD,CA3D+B,CA6DrD,CA7DD,IA8DK,IAAmB,SAAf,EAAA/C,WAAW,EAAgC,SAAf,EAAAA,WAAhC,CAA0D,CAG7D,OACMuC,KADN,CAFIC,WAAU,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAEjB,CADII,YAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAClB,CAASjW,CAAC,CAAG,CAAb,CAAoB,CAAJ,CAAAA,CAAhB,CAAuBA,CAAC,EAAxB,CACM4V,IADN,CACyB,CAAX,CAAAhV,KAAK,CAACZ,CAAD,CAAN,CAAmB,CAAC,CAApB,CAA0B,CADvC,CAEE6V,WAAU,CAAC7V,CAAD,CAAV,CAAgB4V,IAAI,CAAGzC,QAAQ,CAAC,CAAD,CAAf,CAAqBvS,KAAK,CAACZ,CAAD,CAAL,CAAWoT,YAAY,CAAC,CAAD,CAF9D,CAIA,IAAK,GAAIpT,EAAC,CAAG,CAAb,CAAoB,CAAJ,CAAAA,CAAhB,CAAuBA,CAAC,EAAxB,CACEiW,YAAW,CAACjW,CAAD,CAAX,CAAiBiG,KAAK,CAACjG,CAAD,CAAL,CACbhN,MAAM,CAAC,CAAD,CAAN,CAAY6iB,WAAU,CAAC,CAAD,CAAtB,CAA4B9D,KAAK,CAAC/R,CAAD,CADpB,CAEbhN,MAAM,CAAC,CAAD,CAAN,CAAY6iB,WAAU,CAAC,CAAD,CAAtB,CAA4B7D,KAAK,CAAChS,CAAD,CAFpB,CAGbhN,MAAM,CAAC,CAAD,CAAN,CAAY6iB,WAAU,CAAC,CAAD,CAAtB,CAA4B5D,KAAK,CAACjS,CAAD,CAHrC,CAMF,OADMsW,iBAAgB,CAAyB,SAArB,EAAAC,iBAAD,CAAmC,CAAnC,CAAuC,CAChE,CAAS1R,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGyR,gBAApB,CAAsCzR,CAAC,EAAvC,CAA2C,IACrC2R,UAAS,OAD4B,CAC1BC,SAAS,OADiB,CAEnCC,SAAS,CAAG9V,KAAK,CAACiE,CAAD,CAFkB,CAGrCiR,WAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAHuB,CAIrCC,YAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CAJuB,CAKrCC,YAAW,CAAG,CAAC,CAAD,CAAM,CAAN,CAAW,CAAX,CALuB,CAMhC,CAAL,EAAAnR,CANqC,EAOvC2R,SAAS,CAAGzE,KAP2B,CAQvC0E,SAAS,CAAGzE,KAR2B,EAU3B,CAAL,EAAAnN,CAVgC,EAWvC2R,SAAS,CAAGxE,KAX2B,CAYvCyE,SAAS,CAAyB,SAArB,EAAAF,iBAAD,CAAmCxE,KAAnC,CAA2CE,KAZhB,GAgBvCuE,SAAS,CAAGvE,KAhB2B,CAiBvCwE,SAAS,CAAG1E,KAjB2B,EAmBzC,GAAM4E,aAAY,CAAGxD,QAAQ,CAAC,CAAD,CAAR,CAAcuD,SAAS,CAAGtD,YAAY,CAAC,CAAD,CAA3D,CACA0C,WAAW,CAAC,CAAD,CAAX,CAAiBU,SAAS,CAAC,CAAD,CAAT,CAAeG,YApBS,CAqBzCb,WAAW,CAAC,CAAD,CAAX,CAAiBU,SAAS,CAAC,CAAD,CAAT,CAAeG,YArBS,CAsBzCb,WAAW,CAAC,CAAD,CAAX,CAAiBU,SAAS,CAAC,CAAD,CAAT,CAAeG,YAtBS,CAuBzCX,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAAX,CAAiBW,SAAS,CAAC,CAAD,CAA1B,CAAgCA,SAAS,CAAC,CAAD,CAAT,CAAeX,WAAW,CAAC,CAAD,CAvBlC,CAwBzCE,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAAX,CAAiBW,SAAS,CAAC,CAAD,CAA1B,CAAgCA,SAAS,CAAC,CAAD,CAAT,CAAeX,WAAW,CAAC,CAAD,CAxBlC,CAyBzCE,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAAX,CAAiBW,SAAS,CAAC,CAAD,CAA1B,CAAgCX,WAAW,CAAC,CAAD,CAAX,CAAiBW,SAAS,CAAC,CAAD,CAzBlC,CA0BzC,GAAIG,UAAS,CAAGlZ,IAAI,CAACmZ,IAAL,CAAUb,YAAW,CAAC,CAAD,CAAX,CAAiBA,YAAW,CAAC,CAAD,CAA5B,CAAkCA,YAAW,CAAC,CAAD,CAAX,CAAiBA,YAAW,CAAC,CAAD,CAA9D,CAAoEA,YAAW,CAAC,CAAD,CAAX,CAAiBA,YAAW,CAAC,CAAD,CAA1G,CAAhB,CACA,GAAI,EAAMY,SAAV,CAAqB,CACnB,GAAIpE,SAAO,CAAG,CAACW,QAAQ,CAAC,CAAD,CAAR,CAAcuD,SAAS,CAAGtD,YAAY,CAAC,CAAD,CAAvC,EAA8CwD,SAA5D,CACoB,SAAf,EAAAvD,WAAD,EAAmC,CAAJ,CAAAxO,CAFhB,GAGjB2N,QAAO,EAAI,CAAC,CAHK,EAKnBwD,YAAW,CAAC,CAAD,CAAX,EAAkBxD,QALC,CAMnBwD,YAAW,CAAC,CAAD,CAAX,EAAkBxD,QANC,CAOnBwD,YAAW,CAAC,CAAD,CAAX,EAAkBxD,QACnB,CAMD,GAJAuD,YAAW,CAAC,CAAD,CAAX,CAAiBC,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAA5B,CAAkCA,WAAW,CAAC,CAAD,CAAX,CAAiBE,YAAW,CAAC,CAAD,CAI/E,CAHAD,YAAW,CAAC,CAAD,CAAX,CAAiBC,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAA5B,CAAkCA,WAAW,CAAC,CAAD,CAAX,CAAiBE,YAAW,CAAC,CAAD,CAG/E,CAFAD,YAAW,CAAC,CAAD,CAAX,CAAiBC,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAA5B,CAAkCE,YAAW,CAAC,CAAD,CAAX,CAAiBF,WAAW,CAAC,CAAD,CAE/E,CADAc,SAAS,CAAGlZ,IAAI,CAACmZ,IAAL,CAAUd,YAAW,CAAC,CAAD,CAAX,CAAiBA,YAAW,CAAC,CAAD,CAA5B,CAAkCA,YAAW,CAAC,CAAD,CAAX,CAAiBA,YAAW,CAAC,CAAD,CAA9D,CAAoEA,YAAW,CAAC,CAAD,CAAX,CAAiBA,YAAW,CAAC,CAAD,CAA1G,CACZ,CAAI,EAAMa,SAAV,CAAqB,CACnB,GAAIpE,QAAO,CAAG,CAACW,QAAQ,CAAC,CAAD,CAAR,CAAcuD,SAAS,CAAGtD,YAAY,CAAC,CAAD,CAAvC,EAA8CwD,SAA5D,CACAb,YAAW,CAAC,CAAD,CAAX,EAAkBvD,OAFC,CAGnBuD,YAAW,CAAC,CAAD,CAAX,EAAkBvD,OAHC,CAInBuD,YAAW,CAAC,CAAD,CAAX,EAAkBvD,OACnB,CACDmD,aAAa,CAAC9Q,CAAD,CAAb,CAAmB,CAACoR,YAAD,CAAcH,WAAd,CAA2BC,YAA3B,CAAwCC,YAAxC,CACpB,CACF,CACD,MAAOL,cACR,CAhO0B,CAqOrBmB,4BAA4B,CAAG,CACnCC,iBADmC,CAEnCC,cAFmC,CAGnCC,cAHmC,CAInCC,cAJmC,CAKnCC,cALmC,GAMhC,CACH,GAAIC,eAAc,CAAG,CAArB,CACmB,SAAf,EAAA/D,WAAW,EAAgC,QAAf,EAAAA,WAF7B,CAGD+D,cAAc,CAAG,CAHhB,CAIqB,SAAf,EAAA/D,WAJN,GAKD+D,cAAc,CAAG,CALhB,KAMGC,kBAAiB,CAAGN,iBAAiB,CAACvjB,MAAlB,CAA2B,CANlD,CAOC8jB,mBAAmB,CAAG,CAPvB,CAQH/C,iBAAiB,CAAC/gB,MAAlB,CAA2B4jB,cARxB,CASH,IAAK,GAAI9jB,GAAC,CAAG,CAAb,CAAgBA,EAAC,CAAG+jB,iBAApB,CAAuC/jB,EAAC,EAAxC,CAA4C,IACpCikB,cAAa,CAAO,CAAJ,CAAAjkB,EADoB,CAEpCkkB,gBAAgB,CAAG,CAACT,iBAAiB,CAACQ,aAAD,CAAlB,CAAmCR,iBAAiB,CAACQ,aAAa,CAAG,CAAjB,CAApD,CACzBR,iBAAiB,CAACQ,aAAa,CAAG,CAAjB,CADQ,CAFiB,CAIpCE,aAAa,CAAG,CAACT,cAAc,CAACO,aAAD,CAAf,CAAgCP,cAAc,CAACO,aAAa,CAAG,CAAjB,CAA9C,CACtBP,cAAc,CAACO,aAAa,CAAG,CAAjB,CADQ,CAJoB,CAMpCG,aAAa,CAAG,CAACT,cAAc,CAACM,aAAD,CAAf,CAAgCN,cAAc,CAACM,aAAa,CAAG,CAAjB,CAA9C,CACtBN,cAAc,CAACM,aAAa,CAAG,CAAjB,CADQ,CANoB,CAQpCI,aAAa,CAAG,CAACT,cAAc,CAACK,aAAD,CAAf,CAAgCL,cAAc,CAACK,aAAa,CAAG,CAAjB,CAA9C,CACtBL,cAAc,CAACK,aAAa,CAAG,CAAjB,CADQ,CARoB,CAUpCK,aAAa,CAAG,CAACT,cAAc,CAACI,aAAD,CAAf,CAAgCJ,cAAc,CAACI,aAAa,CAAG,CAAjB,CAA9C,CACtBJ,cAAc,CAACI,aAAa,CAAG,CAAjB,CADQ,CAVoB,CAYpCM,MAAM,CAAGnC,kBAAkB,CAAC8B,gBAAD,CAAmBC,aAAnB,CAAkCC,aAAlC,CAC/BC,aAD+B,CAChBC,aADgB,CACDrD,iBADC,CAZS,CAc1C,GAAIsD,MAAM,CAACrkB,MAAP,EAAiB4jB,cAArB,CACE,IAAK,GAAIpX,EAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGoX,cAApB,CAAoCpX,CAAC,EAArC,CAAyC,CACvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CADQ,CAEvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAFQ,CAGvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAHQ,CAIvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B,CAJQ,CAKvCwB,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CALQ,CAMvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CANQ,CAOvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAPQ,CAQvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B,CARQ,CASvCwB,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CATQ,CAUvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,CAA1B,EAA+B2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAVQ,CAWvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,EAA1B,EAAgC2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAXO,CAYvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,EAA1B,EAAgC,CAZO,CAavCwB,gBAAgB,CAACxB,QAAjB,CAA0B,EAA1B,EAAgC2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAbO,CAcvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,EAA1B,EAAgC2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAdO,CAevC0T,gBAAgB,CAACxB,QAAjB,CAA0B,EAA1B,EAAgC2F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,EAAa,CAAb,CAfO,CAgBvC0T,gBAAgB,CAACxB,QAAjB,CAA0B,EAA1B,EAAgC,CAhBO,CAiBvC,KAAKthB,KAAL,CAAWknB,WAAX,CAAuBR,mBAAvB,CAA4C5D,gBAA5C,CAjBuC,CAkBvC,GAAMqE,MAAK,CAAGpF,SAAS,CAAC2E,mBAAD,CAAvB,CACIS,KAnBmC,EAoBrCA,KAAK,CAACjG,iBAAN,CAAwB+F,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,CAAxB,CAAsC6X,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,CAAtC,CACE6X,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,CADF,CACgB6X,MAAM,CAAC7X,CAAD,CAAN,CAAU,CAAV,CADhB,CApBqC,CAsBvCsX,mBAAmB,EACpB,CAEJ,CACD,KAAK1mB,KAAL,CAAWonB,cAAX,CAA0B7gB,WAA1B,GACD,CA9R0B,CAmSrB8gB,uBAAuB,CAAGC,cAAc,EAAI,CAChD,GAAId,eAAc,CAAG,CAArB,CACmB,SAAf,EAAA/D,WAAW,EAAgC,QAAf,EAAAA,WAFgB,CAG9C+D,cAAc,CAAG,CAH6B,CAIxB,SAAf,EAAA/D,WAJuC,GAK9C+D,cAAc,CAAG,CAL6B,EAQhD,OACQe,WADR,CAFMC,eAAe,CAAGF,cAAc,CAAC1kB,MAEvC,CADI8jB,mBAAmB,CAAG,CAC1B,CAAShkB,GAAC,CAAG,CAAb,CAAgBA,GAAC,CAAG8kB,eAApB,CAAqC9kB,GAAC,EAAtC,CAA0C,CAClC6kB,UADkC,CACrBD,cAAc,CAAC5kB,GAAD,CADO,CAExC,IAAK,GAAI0M,EAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGoX,cAApB,CAAoCpX,CAAC,EAArC,CAAyC,CACvC2T,WAAW,CAAChZ,MAAZ,CAAmBwd,UAAnB,CADuC,CAEvC,KAAKvnB,KAAL,CAAWynB,UAAX,CAAsBf,mBAAtB,CAA2C3D,WAA3C,CAFuC,CAGvC,GAAMoE,MAAK,CAAGpF,SAAS,CAAC2E,mBAAD,CAAvB,CACIS,KAJmC,EAKrCA,KAAK,CAACzd,SAAN,CAAgBqZ,WAAhB,CALqC,CAMvC2D,mBAAmB,EACpB,CACF,CACD,KAAK1mB,KAAL,CAAW0nB,aAAX,CAAyBnhB,WAAzB,GACD,CAvT0B,CA8TrBohB,oBAAoB,CAAG,IAAM,IAC3BxB,kBAAiB,CAAG9C,kBADO,CAE3B+C,cAAc,CAAG9C,eAFU,CAG3B+C,cAAc,CAAG9C,eAHU,CAI3B+C,cAAc,CAAG9C,eAJU,CAK3B+C,cAAc,CAAG9C,eALU,CAM3B6D,cAAc,CAAG5D,eANU,CAQ3BkE,YAAY,CAAG,KAAKzjB,WAAL,CAAmB,KAAKG,QAAxB,EAAoC+d,iBAAiB,CAAG,CAAxD,CARY,CAS3BwF,YAAY,CAAG/a,IAAI,CAAC8O,KAAL,CAAWgM,YAAX,CATY,CAU3BE,UAAU,CAAG,GAAKF,YAAY,CAAGC,YAApB,CAVc,CAW3BE,SAAS,CAAGjb,IAAI,CAACkb,IAAL,CAAUJ,YAAV,CAXe,CAYjC,GAAIhF,aAAJ,CAAmB,IACXqF,iBAAgB,CAAGhQ,SAAS,CAAC4P,YAAY,CAACzR,QAAb,EAAD,CADjB,CAEX8R,aAAa,CAAGjQ,SAAS,CAAC8P,SAAS,CAAC3R,QAAV,EAAD,CAFd,CAGX+R,YAAY,CAAGnG,MAAM,CAAC6F,YAAY,CAACzR,QAAb,EAAD,CAHV,CAIXgS,SAAS,CAAGpG,MAAM,CAAC+F,SAAS,CAAC3R,QAAV,EAAD,CAJP,CAKXiS,YAAY,CAAGpG,MAAM,CAAC4F,YAAY,CAACzR,QAAb,EAAD,CALV,CAMXkS,SAAS,CAAGrG,MAAM,CAAC8F,SAAS,CAAC3R,QAAV,EAAD,CANP,CAOXmS,YAAY,CAAGrG,MAAM,CAAC2F,YAAY,CAACzR,QAAb,EAAD,CAPV,CAQXoS,SAAS,CAAGtG,MAAM,CAAC6F,SAAS,CAAC3R,QAAV,EAAD,CARP,CASXqS,YAAY,CAAGtG,MAAM,CAAC0F,YAAY,CAACzR,QAAb,EAAD,CATV,CAUXsS,SAAS,CAAGvG,MAAM,CAAC4F,SAAS,CAAC3R,QAAV,EAAD,CAVP,CAWjBiN,kBAAkB,CAACzgB,MAAnB,CAA4BqlB,gBAAgB,CAACrlB,MAX5B,CAYjB0gB,eAAe,CAAC1gB,MAAhB,CAAyBqlB,gBAAgB,CAACrlB,MAZzB,CAajB2gB,eAAe,CAAC3gB,MAAhB,CAAyBqlB,gBAAgB,CAACrlB,MAbzB,CAcjB4gB,eAAe,CAAC5gB,MAAhB,CAAyBqlB,gBAAgB,CAACrlB,MAdzB,CAejB6gB,eAAe,CAAC7gB,MAAhB,CAAyBqlB,gBAAgB,CAACrlB,MAfzB,CAiBjB,IAAK,GAAIF,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGulB,gBAAgB,CAACrlB,MAArC,CAA6CF,GAAC,EAA9C,CACEyjB,iBAAiB,CAACzjB,GAAD,CAAjB,CAAuBolB,UAAU,CAAGG,gBAAgB,CAACvlB,GAAD,CAA7B,CAAmC,CAAC,EAAMolB,UAAP,EAAqBI,aAAa,CAACxlB,GAAD,CAD9F,CAEE0jB,cAAc,CAAC1jB,GAAD,CAAd,CAAoBolB,UAAU,CAAGK,YAAY,CAACzlB,GAAD,CAAzB,CAA+B,CAAC,EAAMolB,UAAP,EAAqBM,SAAS,CAAC1lB,GAAD,CAFnF,CAGE2jB,cAAc,CAAC3jB,GAAD,CAAd,CAAoBolB,UAAU,CAAGO,YAAY,CAAC3lB,GAAD,CAAzB,CAA+B,CAAC,EAAMolB,UAAP,EAAqBQ,SAAS,CAAC5lB,GAAD,CAHnF,CAIE4jB,cAAc,CAAC5jB,GAAD,CAAd,CAAoBolB,UAAU,CAAGS,YAAY,CAAC7lB,GAAD,CAAzB,CAA+B,CAAC,EAAMolB,UAAP,EAAqBU,SAAS,CAAC9lB,GAAD,CAJnF,CAKE6jB,cAAc,CAAC7jB,GAAD,CAAd,CAAoBolB,UAAU,CAAGW,YAAY,CAAC/lB,GAAD,CAAzB,CAA+B,CAAC,EAAMolB,UAAP,EAAqBY,SAAS,CAAChmB,GAAD,CAEpF,CAxBD,IAyBEyjB,kBAAiB,sCAAGlO,SAAS,GAAZ,CAzBnB,CA0BEmO,cAAc,mCAAGpE,MAAM,GAAT,CA1BhB,CA2BEqE,cAAc,mCAAGpE,MAAM,GAAT,CA3BhB,CA4BEqE,cAAc,mCAAGpE,MAAM,GAAT,CA5BhB,CA6BEqE,cAAc,mCAAGpE,MAAM,GAAT,CA7BhB,CAkCA,GAHA+D,4BAA4B,CAACC,iBAAD,CAAoBC,cAApB,CAAoCC,cAApC,CAAoDC,cAApD,CAC1BC,cAD0B,CAG5B,CADA,KAAK3hB,yBAAL,GACA,CAAI,MAAAgJ,MAAJ,CAAyB,CACvB,GAAI+U,YAAJ,CAAkB,IACVgG,cAAa,CAAG/a,MAAM,CAACia,YAAY,CAACzR,QAAb,EAAD,CADZ,CAEVwS,UAAU,CAAGhb,MAAM,CAACma,SAAS,CAAC3R,QAAV,EAAD,CAFT,CAGhBkR,cAAc,CAAC1kB,MAAf,CAAwB+lB,aAAa,CAAC/lB,MAHtB,CAIhB,IAAK,GAAIF,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGimB,aAAa,CAAC/lB,MAAlC,CAA0CF,GAAC,EAA3C,CACEqgB,WAAW,CAAChZ,MAAZ,CAAmB4e,aAAa,CAACjmB,GAAD,CAAhC,CADF,CAEEsgB,WAAW,CAACjZ,MAAZ,CAAmB6e,UAAU,CAAClmB,GAAD,CAA7B,CAFF,CAGEqgB,WAAW,CAAC8F,MAAZ,CAAmB9F,WAAW,CAACxM,CAAZ,CAAgBuR,UAAhB,CAA6B9E,WAAW,CAACzM,CAAZ,EAAiB,EAAIuR,UAArB,CAAhD,CACE/E,WAAW,CAACvM,CAAZ,CAAgBsR,UAAhB,CAA6B9E,WAAW,CAACxM,CAAZ,EAAiB,EAAIsR,UAArB,CAD/B,CAEE/E,WAAW,CAAC9f,CAAZ,CAAgB6kB,UAAhB,CAA6B9E,WAAW,CAAC/f,CAAZ,EAAiB,EAAI6kB,UAArB,CAF/B,CAHF,CAMER,cAAc,CAAC5kB,GAAD,CAAd,CAAoBqgB,WAAW,CAACrM,MAAZ,EANtB,CAQA;;;;UAKD,CAjBD,IAkBE4Q,eAAc,mCAAG1Z,MAAM,GAAT,CAlBhB,CAoBAyZ,uBAAuB,CAACC,cAAD,CACxB,CACF,CAnY0B,CAkO3B;;KAsKA,KAAK3G,SAAL,CAAiB,IAAM,CACrB,IAAK,GAAIje,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGqf,SAAS,CAACnf,MAA9B,CAAsCF,GAAC,EAAvC,CACEqf,SAAS,CAACrf,GAAD,CAAT,CAAaie,SAAb,CAAuB,KAAK3gB,KAAL,CAAWI,QAAX,CAAsB,KAAKJ,KAAL,CAAWI,QAAX,CAAoBQ,KAA1C,OAAvB,CAEH,CA5Y0B,CA8Y3B;;;;KAKA,GAAMkoB,aAAY,CAAI7E,aAAD,EAAmB,CACtC,GAAK7B,MAAM,MAAP,EAAyB6B,aAA7B,CACE,IAAK,GACGkD,MADH,CAAIzkB,GAAC,CAAG,CAAb,CAAgBA,GAAC,CAAG4f,gBAApB,CAAsC5f,GAAC,EAAvC,CACQykB,KADR,CACgB,IAAKxpB,mBAAO,CAAC,EAAD,CAAP,CAAmBO,KAAxB,gBAAqDwE,GAArD,CAAwD,IAAxD,CADhB,CAEM,MAAA0f,MAAM,EAAiB,MAAAA,MAAM,CAAC1f,GAAD,CAFnC,EAGIykB,KAAK,CAAC1G,QAAN,CAAe2B,MAAM,CAAC1f,GAAD,CAArB,CAHJ,CAK0B,CAApB,CAAA2f,iBALN,EAMI8E,KAAK,CAAC3f,gBAAN,IANJ,CAQEua,SAAS,CAACrf,GAAD,CAAT,CAAeykB,KARjB,CASE,KAAKnnB,KAAL,CAAWwG,GAAX,CAAe2gB,KAAK,CAACpG,QAAN,EAAf,CATF,CAeF;AAHKqB,MAAM,MAAP,EAAyB6B,aAdS,EAepC,KAAKtD,SAAL,CAAe,KAAK3gB,KAAL,CAAWI,QAAX,CAAsB,KAAKJ,KAAL,CAAWI,QAAX,CAAoBQ,KAA1C,OAAf,CAfoC,CAkBtCslB,4BAA4B,CAACjO,SAAS,GAAV,CAAiB+J,MAAM,GAAvB,CAC1BC,MAAM,GADoB,CACbC,MAAM,GADO,CACAC,MAAM,GADN,CAlBU,CAqBlCvU,MAAM,MArB4B,EAsBpCyZ,uBAAuB,CAACzZ,MAAM,GAAP,CAtBa,CAwBtC,KAAK8U,KAAL,GAxBsC,CAyBtC,KAAK9d,yBAAL,GACD,CA1BD,CA4BA;;;;KAKA,KAAKmkB,cAAL,CAAsB5B,KAAK,EAAI,CACzBA,KAAK,CAAC9G,OADmB,EAE3B0B,SAAS,CAAC3e,IAAV,CAAe+jB,KAAf,CAF2B,CAG7B,KAAKzE,KAAL,GAH6B,CAI7B,KAAK9d,yBAAL,GACD,CAzb0B,CAic3B,KAAKokB,cAAL,CAAsB,CAACpnB,IAAD,CAAOiU,EAAP,GAAc,CAClC,GAAIjU,IAAI,CAACwS,MAAT,CAAiB,CACf,GAAM+S,MAAK,CAAG,IAAKxpB,mBAAO,CAAC,EAAD,CAAP,CAAmBO,KAAxB,gBAAqD2X,EAArD,CAAyD,IAAzD,CAAd,CAMA,MALAsR,MAAK,CAAC7G,QAAN,CAAe1e,IAAf,CAKA,CAJAmgB,SAAS,CAAC3e,IAAV,CAAe+jB,KAAf,CAIA,CAHA,KAAKnnB,KAAL,CAAWwG,GAAX,CAAe2gB,KAAK,CAACpG,QAAN,EAAf,CAGA,CAFA,KAAK2B,KAAL,GAEA,CADA,KAAK9d,yBAAL,GACA,CAAOuiB,KACR,CAEF,CA5c0B,CAqd3B,KAAK8B,YAAL,CAAoBC,gBAAgB,EAAI,CACtC,IAAK,GAAIxmB,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGqf,SAAS,CAACnf,MAA9B,CAAsCF,GAAC,EAAvC,CACEwmB,gBAAgB,CAACnH,SAAS,CAACrf,GAAD,CAAV,CAEnB,CAzd0B,CA2d3B,GAAIiiB,WAAU,CAAG,CAACZ,cAAD,CAAiBE,aAAjB,GACR,CAAClkB,QAAD,CAAW6kB,SAAX,GAAyB,CAC9B,GAAMuE,aAAY,CAAGppB,QAAQ,CAACE,gBAAT,EAArB,CACA,KAAKF,QAAL,CAAckS,IAAd,CAAmBkX,YAAnB,CAF8B,CAG9B,KAAKppB,QAAL,CAAciG,qBAAd,EAH8B,CAI9B,KAAKjG,QAAL,CAAciC,kBAAd,EAJ8B,CAK9BmnB,YAAY,CAAClf,OAAb,EAL8B,CAM1B2a,SAAS,EAAIA,SAAS,CAAC,CAAD,CANI,GAO5B,KAAK5kB,KAAL,CAAWI,QAAX,CAAsBwkB,SAAS,CAAC,CAAD,CAPH,EAQ9BkE,YAAY,CAAC7E,aAAD,CARkB,CAS9B,KAAKjkB,KAAL,CAAWqG,IAAX,CAAkB,KAAKrC,SATO,CAU9B,KAAKhE,KAAL,CAAWwE,QAAX,CAAsB,IAVQ,CAW9BzE,QAAQ,CAACkK,OAAT,EAX8B,CAY1B,MAAA8Z,cAAc,EAA2C,UAAzB,QAAOA,eAZb,EAa5BA,cAAc,CAAC,IAAD,CACjB,CAfH,CAkBA;;GA7e2B,CA4gB3B;;KA5gB2B,CAqiB3B;;;;KAriB2B,CAqkB3B;;;;KArkB2B,CAwlB3B;;;;KAxlB2B,CAmmB3B;;;;KAnmB2B,CA6mB3B;;KA7mB2B,CAkoB3B;;KAlJA,KAAK7Z,qBAAL,CAA6B,UAAY,CACvC,GAAIC,aAAY,CAAG,CAAC,CAApB,CACA,GAAI,KAAKnK,KAAL,EAAc,KAAK0iB,KAAvB,CAA8B,CAC5B,GAAIrY,OAAM,CAAG,GAAIjL,MAAK,CAAC4F,OAAvB,CACA,KAAKoG,cAAL,GAAsBd,SAAtB,CAAgCD,MAAhC,CAF4B,CAQ5B,OACQsc,cADR,CALIR,iBAAiB,CAAGlO,SAAS,GAKjC,CAJMwO,iBAAiB,CAAGN,iBAAiB,CAACvjB,MAAlB,CAA2B,CAIrD,CAHImE,QAAQ,CAAG,GAAI3H,MAAK,CAAC4F,OAGzB,CAFIuF,QAAQ,CAAG,CAAC,CAEhB,CADIC,eAAe,CAAG,CACtB,CAAS9H,GAAC,CAAG,CAAb,CAAgBA,GAAC,CAAG+jB,iBAApB,CAAuC/jB,GAAC,EAAxC,CACQikB,aADR,CAC4B,CAAJ,CAAAjkB,GADxB,CAEEqE,QAAQ,CAACwE,GAAT,CAAa4a,iBAAiB,CAACQ,aAAD,CAA9B,CACER,iBAAiB,CAACQ,aAAa,CAAG,CAAjB,CADnB,CAEER,iBAAiB,CAACQ,aAAa,CAAG,CAAjB,CAFnB,CAFF,CAKEnc,eAAe,CAAGH,MAAM,CAACQ,UAAP,CAAkB9D,QAAlB,CALpB,CAMkB,CAAC,CAAb,EAAAwD,QANN,EAOIA,QAAQ,CAAGC,eAPf,CAQIL,YAAY,CAAGzH,GARnB,EASa6H,QAAQ,CAAGC,eATxB,GAUID,QAAQ,CAAGC,eAVf,CAWIL,YAAY,CAAGzH,GAXnB,CAcD,CACD,MAAOyH,aACR,CA1gB0B,CA+gB3B,KAAKW,gBAAL,CAAwB,UAAY,CAKlC,GAH+B,CAAC,CAA5B,OAAKnG,kBAGT,GAFE,KAAKA,kBAAL,CAA0B,KAAKuF,qBAAL,EAE5B,EAA+B,CAA3B,OAAKvF,kBAAT,EAMM,KAAK3E,KANX,CACE;;;;QAKgB,CACd,GAAI+G,SAAQ,CAAG,GAAI3H,MAAK,CAAC4F,OAAzB,CAGA,MAFA,MAAKhF,KAAL,CAAWopB,WAAX,CAAuB,KAAKzkB,kBAA5B,CAAgDme,gBAAhD,CAEA,CADA/b,QAAQ,CAACsiB,qBAAT,CAA+BvG,gBAA/B,CACA,CAAO/b,QACR,CAIJ,CAniB0B,CA0iB3B,KAAKqE,cAAL,CAAsB,IAAM,CAC1B,GAAI,KAAKpL,KAAL,EAAc,KAAK0iB,KAAnB,EAA4B,KAAK1iB,KAAL,CAAWgJ,OAA3C,CAAoD,CAClD,GAAI,KAAKpE,yBAAT,CAAoC,CAClCqe,aAAa,CAAC7Y,sBAAd,CACE,KAAKpK,KAAL,CAAWD,QAAX,CAAoBY,UAApB,CAA+BoG,QADjC,CADkC,CAGlC,IAAK,GAAIrE,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAG4f,gBAApB,CAAsC5f,GAAC,EAAvC,CACE,KAAK1C,KAAL,CAAWopB,WAAX,CAAuB1mB,GAAvB,CAA0BogB,gBAA1B,CADF,CAEEI,aAAa,CAACjR,IAAd,CAAmBgR,aAAnB,EAAkC/X,YAAlC,CAA+C4X,gBAA/C,CAFF,CAGW,CAAL,EAAApgB,GAHN,CAIIygB,aAAa,CAAClR,IAAd,CAAmBiR,aAAnB,CAJJ,CAMIC,aAAa,CAACmG,KAAd,CAAoBpG,aAApB,CANJ,CASA,GAAIC,aAAJ,CACE,KAAKte,iBAAL,CAAuBoN,IAAvB,CAA4BkR,aAA5B,CADF,CAEE,KAAKnjB,KAAL,CAAWwL,iBAAX,EAFF,CAGE,KAAK3G,iBAAL,CAAuBqG,YAAvB,CAAoC,KAAKlL,KAAL,CAAWmL,WAA/C,CAHF,CAIE,KAAKvG,yBAAL,GAJF,KAME,OACH,CACD,MAAO,MAAKC,iBACb,CAEF,CAnkB0B,CA0kB3B,KAAK4D,YAAL,CAAoBV,IAAI,EAAI,CAExB,KAAK5D,WAFmB,CACtB4D,IAAI,CAAG,KAAKzD,QADU,CAEL,KAAKA,QAFA,CAGjB,EAAIyD,IAHa,CAIL,CAJK,CAMLA,IANK,EAOtB4a,YAAY,EAAIC,aAPM,IAQxB+E,oBAAoB,EARI,CASpB/E,aAToB,GAUtB,KAAKle,oBAAL,GAVsB,EAY3B,CAtlB0B,CA6lB3B,KAAKmE,aAAL,CAAqB,OACM,CAApB,CAAAwZ,iBAAD,GAA4BM,YAAY,EAAIC,aAA5C,CADe,CA7lBM,CAwmB3B,KAAK/a,cAAL,CAAsB,IACb,KAAK1D,WAzmBa,CAgnB3B,KAAK8F,OAAL,CAAe,IAAM,CACnB,IAAK,GAAIvH,KAAC,CAAGqf,SAAS,CAACnf,MAAV,CAAmB,CAAhC,CAAwC,CAAL,EAAAF,IAAnC,CAA2CA,IAAC,EAA5C,CACEqf,SAAS,CAACrf,IAAD,CAAT,CAAauH,OAAb,GAEE,KAAKlK,QAJU,EAKjB,KAAKA,QAAL,CAAckK,OAAd,EALiB,CAMf,KAAKjK,KANU,EAOjB,KAAKA,KAAL,CAAWI,QAAX,CAAoB6J,OAApB,EAPiB,CAQnB+X,MAAM,OARa,CASnBC,MAAM,OATa,CAUnBC,MAAM,OAVa,CAWnBjK,SAAS,OAXU,CAYnBkK,MAAM,OAZa,CAanBvU,MAAM,OAba,CAcnB,KAAK8U,KAAL,GAdmB,CAenB,KAAK1e,SAAL,OACD,CAhoB0B,CAqoB3B,KAAKiJ,MAAL,CAAc,CAACC,KAAD,CAAQxB,aAAR,CAAuB5L,OAAvB,GAAmC,CAC/C,GAAI,IAAA4L,aAAJ,CAA2B,CACzB,GAAIyB,WAAU,CAAG,KAAKhJ,WAAL,CAAmB+I,KAApC,CACIC,UAAU,CAAG,KAAK7I,QAFG,GAGvB6I,UAHuB,EAGG,KAAK7I,QAHR,EAIzB,KAAKH,WAAL,CAAmBgJ,UAJM,EAKrBwV,YAAY,EAAIC,aALK,GAMvB+E,oBAAoB,EAEvB,CACD,KAAKlc,YAAL,CAAkBC,aAAlB,CAAiC5L,OAAjC,CACD,CACF,C,CAED3B,QAAQ,CAACqF,SAAT,CAAqBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CACrBlE,OAAO,CAACnB,QAAR,CAAmBA,Q;;;;;;;;;GCjqBfiB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAEf4rB,MAAM,CAAG5rB,mBAAO,CAAC,EAAD,CAAP,CAA2B4rB,M,CACpCC,WAAW,CAAGpqB,KAAK,CAACoqB,W,CACpBviB,aAAa,CAAG7H,KAAK,CAAC6H,a,CACtBjC,OAAO,CAAG5F,KAAK,CAAC4F,O,CAChBykB,OAAO,CAAGrqB,KAAK,CAACqqB,O,CAChB/nB,KAAK,CAAGtC,KAAK,CAACsC,K,CACdW,OAAO,CAAGjD,KAAK,CAACiD,O,CAChBqO,KAAK,CAAG/S,mBAAO,CAAC,CAAD,CAAP,CAA6B+S,K,CACrCzS,QAAQ,CAAGN,mBAAO,CAAC,CAAD,CAAP,CAA6BM,Q,CACxCyrB,UAAU,CAAGtqB,KAAK,CAACsqB,U,CACnBC,qBAAqB,CAAGvqB,KAAK,CAACuqB,qB,CAC9BC,YAAY,CAAGjsB,mBAAO,CAAC,EAAD,CAAP,CAA2BisB,Y,CAE9C;;;GAKA,QAAS9H,WAAT,CAAqB+H,OAArB,CAA+B,CAEN,SAAnB,QAAOA,QAFkB,GAI7B/Y,OAAO,CAACqI,IAAR,CAAc,2EAAd,CAJ6B,CAK7B0Q,OAAO,OALsB,EAS9B,KAAKA,OAAL,CAAiBA,OAAO,SAAT,CAAsCF,qBAAtC,CAA4BE,OATb,CAW9B,KAAKC,eAAL,GAX8B,CAa7B,KAAKC,YAAL,CAAoB,EAErB,CAEDtmB,MAAM,CAAC+K,MAAP,CAAesT,UAAU,CAACte,SAA1B,CAAqC,CAEpCogB,IAAI,CAAE,cAAWvJ,GAAX,CAAgB2P,MAAhB,CAAwBC,UAAxB,CAAoCC,OAApC,CAA8C,IAE/C1Z,MAAK,CAAG,IAFuC,CAI/C2Z,WAAW,CAAG,KAAKA,WAAL,EAAkD,QAA5B,QAAO,MAAKA,WAAlC,CAA+D,KAAKA,WAApE,CAAkFX,WAAW,CAACY,cAAZ,CAA4B/P,GAA5B,CAJjD,CAM/CmK,MAAM,CAAG,GAAIkF,WAAJ,CAAgB,KAAKG,OAArB,CANsC,CAQ3CQ,MAAM,CAAGhQ,GAAG,CAACiQ,KAAJ,CAAU,GAAV,CARkC,CAa/C,KAAKP,YAb0C,CAW9B,CAAf,GAAA1P,GAAG,CAACzX,MAXyC,CAa1B2nB,aAAa,CAAC,CAAD,CAba,CAiB3B,EAjB2B,CAqBnD/F,MAAM,CAACgG,kBAAP,CAA2B,KAAKV,eAAhC,CArBmD,CAsBnDtF,MAAM,CAACZ,IAAP,CAAavJ,GAAb,CAAkB,SAAWgB,IAAX,CAAkB,IAE/BoP,KAAI,CAAGC,IAAI,CAAChG,KAAL,CAAYrJ,IAAZ,CAFwB,CAG/BvE,QAAQ,CAAG2T,IAAI,CAAC3T,QAHe,CAKnC,GAAKA,QAAQ,SAAb,CAA8B,CAE7B,GAAInJ,KAAI,CAAGmJ,QAAQ,CAACnJ,IAApB,CAEA,GAAKA,IAAI,SAAT,EAE6B,QAAvB,GAAAA,IAAI,CAACgd,WAAL,EAFN,CAKE,WADA7Z,QAAO,CAACC,KAAR,CAAe,qBAAuBsJ,GAAvB,CAA6B,oDAA5C,CAOF,CAEE,GAAI7J,KAAK,EAAIA,KAAK,CAACkU,KAAnB,CAA0B,CACxB,GAAIpL,OAAM,CAAG9I,KAAK,CAACkU,KAAN,CAAa+F,IAAb,CAAmBN,WAAnB,CAAb,CACAH,MAAM,CAAE1Q,MAAM,CAACvZ,QAAT,CAAmBuZ,MAAM,CAACsL,SAA1B,CACP,CAEJ,CA3BD,CA2BGqF,UA3BH,CA2BeC,OA3Bf,CA6BA,CArDmC,CAuDpCU,cAAc,CAAE,wBAAW5U,KAAX,CAAmB,CAElC,KAAKmU,WAAL,CAAmBnU,KAEnB,CA3DmC,CA6DpC0O,KAAK,CAAI,UAAY,CAEpB,QAASmG,WAAT,CAAqBJ,IAArB,CAA2B1qB,QAA3B,CAAsC,CAErC,QAAS+qB,SAAT,CAAmB9U,KAAnB,CAA0BjP,QAA1B,CAAqC,CAEpC,MAAOiP,MAAK,CAAK,GAAKjP,QAEtB,CAED,GAAIrE,EAAJ,CAAO0M,CAAP,CAAU2b,EAAV,CAEC3oB,MAFD,CAES4oB,OAFT,CAICC,UAJD,CAIaC,WAJb,CAI0BC,OAJ1B,CAImC5a,aAJnC,CAMC5C,IAND,CAOCyd,MAPD,CAQCC,WARD,CASCnU,eATD,CAUCC,aAVD,CAUgBC,mBAVhB,CAWCC,YAXD,CAWeC,kBAXf,CAaC1I,MAbD,CAaSK,IAbT,CAaeqc,KAbf,CAasBC,KAbtB,CAa6BzhB,GAb7B,CAakC9C,MAblC,CAeCwkB,OAfD,CAeU7a,EAfV,CAec8a,CAfd,CAeiBpZ,CAfjB,CAiBC1P,KAAK,CAAG8nB,IAAI,CAAC9nB,KAjBd,CAkBCG,QAAQ,CAAG2nB,IAAI,CAAC3nB,QAlBjB,CAmBC+K,OAAO,CAAG4c,IAAI,CAAC5c,OAnBhB,CAoBCD,MAAM,CAAG6c,IAAI,CAAC7c,MApBf,CAsBCoC,KAAK,CAAGya,IAAI,CAACza,KAtBd,CAwBC0b,SAAS,CAAG,CAxBb,CA2BA,GAAK,SAAAjB,IAAI,CAAC3c,GAAV,CAA8B,CAE7B;AAEA,IAAMpL,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAG+nB,IAAI,CAAC3c,GAAL,CAASlL,MAA1B,CAAkCF,CAAC,EAAnC,CAEM+nB,IAAI,CAAC3c,GAAL,CAAUpL,CAAV,EAAcE,MAFpB,EAE6B8oB,SAAS,EAFtC,CAMA,IAAMhpB,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGgpB,SAAjB,CAA4BhpB,CAAC,EAA7B,CAEC3C,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA8B,EAI/B,CAnDoC,IAqDrCN,MAAM,CAAG,CArD4B,CAsDrC4oB,OAAO,CAAGloB,QAAQ,CAACF,MAtDkB,CAwD7BR,MAAM,CAAG4oB,OAxDoB,EA0DpCpc,MAAM,CAAG,GAAI5J,QA1DuB,CA4DpC4J,MAAM,CAACtM,CAAP,CAAWQ,QAAQ,CAAEV,MAAM,EAAR,CAAR,CAAwB4N,KA5DC,CA6DpCpB,MAAM,CAACrM,CAAP,CAAWO,QAAQ,CAAEV,MAAM,EAAR,CAAR,CAAwB4N,KA7DC,CA8DpCpB,MAAM,CAAC5C,CAAP,CAAWlJ,QAAQ,CAAEV,MAAM,EAAR,CAAR,CAAwB4N,KA9DC,CAgEpCjQ,QAAQ,CAAC+C,QAAT,CAAkBM,IAAlB,CAAwBwL,MAAxB,CAhEoC,CAuElC,GAHHxM,MAAM,CAAG,CAGN,CAFH4oB,OAAO,CAAGroB,KAAK,CAACC,MAEb,CAAI6nB,IAAI,CAAC3c,GAAT,CAEE,IAAMpL,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAG+nB,IAAI,CAAC3c,GAAL,CAASlL,MAA1B,CAAkCF,CAAC,EAAnC,CAAyC,CAEvC3C,QAAQ,CAAC+N,GAAT,CAAapL,CAAb,EAAkB,EAFqB,CAIvC,IAAM,GAAIuR,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGwW,IAAI,CAAC3c,GAAL,CAASpL,CAAT,EAAYE,MAAjC,CAA0CqR,CAAC,EAA3C,CAEElU,QAAQ,CAAC+N,GAAT,CAAapL,CAAb,EAAgBuR,CAAhB,EAAqBwW,IAAI,CAAC3c,GAAL,CAASpL,CAAT,EAAYuR,CAAZ,CAIxB,CAIH,GAAIpG,OAAJ,CAEE,IAAMnL,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGmL,OAAO,CAACjL,MAAzB,CAAiCF,CAAC,EAAlC,CAEE3C,QAAQ,CAAC8N,OAAT,CAAiBnL,CAAjB,EAAsBmL,OAAO,CAACnL,CAAD,CAA7B,CAMJ,GAAIkL,MAAJ,CAEE,IAAMlL,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGkL,MAAM,CAAChL,MAAxB,CAAgCF,CAAC,EAAjC,CAEE3C,QAAQ,CAAC6N,MAAT,CAAgBlL,CAAhB,EAAqBkL,MAAM,CAAClL,CAAD,CAA3B,CArG8B,KA4G7BN,MAAM,CAAG4oB,OA5GoB,EAwHpC;AAEA,GAZArd,IAAI,CAAGhL,KAAK,CAAEP,MAAM,EAAR,CAYZ,CAVAgpB,MAAM,CAAGN,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAUjB,CATA0d,WAAW,CAAGP,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAStB,CARAuJ,eAAe,CAAG4T,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAQ1B,CAPAwJ,aAAa,CAAG2T,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAOxB,CANAyJ,mBAAmB,CAAG0T,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAM9B,CALA0J,YAAY,CAAGyT,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAKvB,CAJA2J,kBAAkB,CAAGwT,QAAQ,CAAEnd,IAAF,CAAQ,CAAR,CAI7B,CAAKyd,MAAL,CAAc,CA0Bb,GAxBAE,KAAK,CAAG,GAAI5a,MAwBZ,CAvBA4a,KAAK,CAACvoB,CAAN,CAAUJ,KAAK,CAAEP,MAAF,CAuBf,CAtBAkpB,KAAK,CAACroB,CAAN,CAAUN,KAAK,CAAEP,MAAM,CAAG,CAAX,CAsBf,CArBAkpB,KAAK,CAACnoB,CAAN,CAAUR,KAAK,CAAEP,MAAM,CAAG,CAAX,CAqBf,CAnBAmpB,KAAK,CAAG,GAAI7a,MAmBZ,CAlBA6a,KAAK,CAACxoB,CAAN,CAAUJ,KAAK,CAAEP,MAAM,CAAG,CAAX,CAkBf,CAjBAmpB,KAAK,CAACtoB,CAAN,CAAUN,KAAK,CAAEP,MAAM,CAAG,CAAX,CAiBf,CAhBAmpB,KAAK,CAACpoB,CAAN,CAAUR,KAAK,CAAEP,MAAM,CAAG,CAAX,CAgBf,CAdAA,MAAM,EAAI,CAcV,CAZKipB,WAYL,GAVC9a,aAAa,CAAG5N,KAAK,CAAEP,MAAM,EAAR,CAUtB,CATCkpB,KAAK,CAAC/a,aAAN,CAAsBA,aASvB,CARCgb,KAAK,CAAChb,aAAN,CAAsBA,aAQvB,EAFAwa,EAAE,CAAGhrB,QAAQ,CAAC4C,KAAT,CAAeC,MAEpB,CAAKsU,eAAL,CAEC,IAAMxU,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGgpB,SAAjB,CAA4BhpB,CAAC,EAA7B,CAOC,IALA8oB,OAAO,CAAGf,IAAI,CAAC3c,GAAL,CAAUpL,CAAV,CAKV,CAHA3C,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA6BqoB,EAA7B,EAAoC,EAGpC,CAFAhrB,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA6BqoB,EAAE,CAAG,CAAlC,EAAwC,EAExC,CAAM3b,CAAC,CAAG,CAAV,CAAiB,CAAJ,CAAAA,CAAb,CAAoBA,CAAC,EAArB,CAEC+b,OAAO,CAAGxoB,KAAK,CAAEP,MAAM,EAAR,CAFhB,CAICqpB,CAAC,CAAGD,OAAO,CAAY,CAAV,CAAAL,OAAF,CAJZ,CAKC9Y,CAAC,CAAGmZ,OAAO,CAAY,CAAV,CAAAL,OAAO,CAAO,CAAhB,CALZ,CAOCxa,EAAE,CAAG,GAAItO,QAAJ,CAAaopB,CAAb,CAAgBpZ,CAAhB,CAPN,CASY,CAAN,GAAAjD,CATN,EASgBrP,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA6BqoB,EAA7B,EAAkC3nB,IAAlC,CAAwCuN,EAAxC,CAThB,CAUY,CAAN,GAAAvB,CAVN,EAUgBrP,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA6BqoB,EAAE,CAAG,CAAlC,EAAsC3nB,IAAtC,CAA4CuN,EAA5C,CAVhB,CAgCF,GAdKwG,aAcL,GAZC+T,WAAW,CAAwB,CAArB,CAAAvoB,KAAK,CAAEP,MAAM,EAAR,CAYpB,CAVCkpB,KAAK,CAACtkB,MAAN,CAAauE,GAAb,CACCsC,OAAO,CAAEqd,WAAW,EAAb,CADR,CAECrd,OAAO,CAAEqd,WAAW,EAAb,CAFR,CAGCrd,OAAO,CAAEqd,WAAF,CAHR,CAUD,CAJCK,KAAK,CAACvkB,MAAN,CAAaiL,IAAb,CAAmBqZ,KAAK,CAACtkB,MAAzB,CAID,EAAKoQ,mBAAL,CAEC,IAAM1U,CAAC,CAAG,CAAV,CAAiB,CAAJ,CAAAA,CAAb,CAAoBA,CAAC,EAArB,CAECwoB,WAAW,CAAwB,CAArB,CAAAvoB,KAAK,CAAEP,MAAM,EAAR,CAFpB,CAIC4E,MAAM,CAAG,GAAIhC,QAAJ,CACR6I,OAAO,CAAEqd,WAAW,EAAb,CADC,CAERrd,OAAO,CAAEqd,WAAW,EAAb,CAFC,CAGRrd,OAAO,CAAEqd,WAAF,CAHC,CAJV,CAWY,CAAN,GAAAxoB,CAXN,EAWgB4oB,KAAK,CAAChc,aAAN,CAAoBlM,IAApB,CAA0B4D,MAA1B,CAXhB,CAYY,CAAN,GAAAtE,CAZN,EAYgB6oB,KAAK,CAACjc,aAAN,CAAoBlM,IAApB,CAA0B4D,MAA1B,CAZhB,CA8BD,GAXKqQ,YAWL,GATC4T,UAAU,CAAGtoB,KAAK,CAAEP,MAAM,EAAR,CASnB,CARC0H,GAAG,CAAG8D,MAAM,CAAEqd,UAAF,CAQb,CANCK,KAAK,CAAC1qB,KAAN,CAAYmJ,MAAZ,CAAoBD,GAApB,CAMD,CALCyhB,KAAK,CAAC3qB,KAAN,CAAYmJ,MAAZ,CAAoBD,GAApB,CAKD,EAAKwN,kBAAL,CAEC,IAAM5U,CAAC,CAAG,CAAV,CAAiB,CAAJ,CAAAA,CAAb,CAAoBA,CAAC,EAArB,CAECuoB,UAAU,CAAGtoB,KAAK,CAAEP,MAAM,EAAR,CAFnB,CAGC0H,GAAG,CAAG8D,MAAM,CAAEqd,UAAF,CAHb,CAKY,CAAN,GAAAvoB,CALN,EAKgB4oB,KAAK,CAACpqB,YAAN,CAAmBkC,IAAnB,CAAyB,GAAI1B,MAAJ,CAAWoI,GAAX,CAAzB,CALhB,CAMY,CAAN,GAAApH,CANN,EAMgB6oB,KAAK,CAACrqB,YAAN,CAAmBkC,IAAnB,CAAyB,GAAI1B,MAAJ,CAAWoI,GAAX,CAAzB,CANhB,CAYD/J,QAAQ,CAAC4C,KAAT,CAAeS,IAAf,CAAqBkoB,KAArB,CAjHa,CAkHbvrB,QAAQ,CAAC4C,KAAT,CAAeS,IAAf,CAAqBmoB,KAArB,CAEA,CApHD,IAoHO,CAkBN,GAhBAtc,IAAI,CAAG,GAAIyB,MAgBX,CAfAzB,IAAI,CAAClM,CAAL,CAASJ,KAAK,CAAEP,MAAM,EAAR,CAed,CAdA6M,IAAI,CAAChM,CAAL,CAASN,KAAK,CAAEP,MAAM,EAAR,CAcd,CAbA6M,IAAI,CAAC9L,CAAL,CAASR,KAAK,CAAEP,MAAM,EAAR,CAad,CAXKipB,WAWL,GATC9a,aAAa,CAAG5N,KAAK,CAAEP,MAAM,EAAR,CAStB,CARC6M,IAAI,CAACsB,aAAL,CAAqBA,aAQtB,EAFAwa,EAAE,CAAGhrB,QAAQ,CAAC4C,KAAT,CAAeC,MAEpB,CAAKsU,eAAL,CAEC,IAAMxU,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGgpB,SAAjB,CAA4BhpB,CAAC,EAA7B,CAMC,IAJA8oB,OAAO,CAAGf,IAAI,CAAC3c,GAAL,CAAUpL,CAAV,CAIV,CAFA3C,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA6BqoB,EAA7B,EAAoC,EAEpC,CAAM3b,CAAC,CAAG,CAAV,CAAiB,CAAJ,CAAAA,CAAb,CAAoBA,CAAC,EAArB,CAEC+b,OAAO,CAAGxoB,KAAK,CAAEP,MAAM,EAAR,CAFhB,CAICqpB,CAAC,CAAGD,OAAO,CAAY,CAAV,CAAAL,OAAF,CAJZ,CAKC9Y,CAAC,CAAGmZ,OAAO,CAAY,CAAV,CAAAL,OAAO,CAAO,CAAhB,CALZ,CAOCxa,EAAE,CAAG,GAAItO,QAAJ,CAAaopB,CAAb,CAAgBpZ,CAAhB,CAPN,CASCtS,QAAQ,CAAC0C,aAAT,CAAwBC,CAAxB,EAA6BqoB,EAA7B,EAAkC3nB,IAAlC,CAAwCuN,EAAxC,CATD,CA6BF,GAZKwG,aAYL,GAVC+T,WAAW,CAAwB,CAArB,CAAAvoB,KAAK,CAAEP,MAAM,EAAR,CAUpB,CARC6M,IAAI,CAACjI,MAAL,CAAYuE,GAAZ,CACCsC,OAAO,CAAEqd,WAAW,EAAb,CADR,CAECrd,OAAO,CAAEqd,WAAW,EAAb,CAFR,CAGCrd,OAAO,CAAEqd,WAAF,CAHR,CAQD,EAAK9T,mBAAL,CAEC,IAAM1U,CAAC,CAAG,CAAV,CAAiB,CAAJ,CAAAA,CAAb,CAAoBA,CAAC,EAArB,CAECwoB,WAAW,CAAwB,CAArB,CAAAvoB,KAAK,CAAEP,MAAM,EAAR,CAFpB,CAIC4E,MAAM,CAAG,GAAIhC,QAAJ,CACR6I,OAAO,CAAEqd,WAAW,EAAb,CADC,CAERrd,OAAO,CAAEqd,WAAW,EAAb,CAFC,CAGRrd,OAAO,CAAEqd,WAAF,CAHC,CAJV,CAUCjc,IAAI,CAACK,aAAL,CAAmBlM,IAAnB,CAAyB4D,MAAzB,CAVD,CAyBD,GARKqQ,YAQL,GANC4T,UAAU,CAAGtoB,KAAK,CAAEP,MAAM,EAAR,CAMnB,CALC6M,IAAI,CAACrO,KAAL,CAAWmJ,MAAX,CAAmB6D,MAAM,CAAEqd,UAAF,CAAzB,CAKD,EAAK3T,kBAAL,CAEC,IAAM5U,CAAC,CAAG,CAAV,CAAiB,CAAJ,CAAAA,CAAb,CAAoBA,CAAC,EAArB,CAECuoB,UAAU,CAAGtoB,KAAK,CAAEP,MAAM,EAAR,CAFnB,CAGC6M,IAAI,CAAC/N,YAAL,CAAkBkC,IAAlB,CAAwB,GAAI1B,MAAJ,CAAWkM,MAAM,CAAEqd,UAAF,CAAjB,CAAxB,CAHD,CASDlrB,QAAQ,CAAC4C,KAAT,CAAeS,IAAf,CAAqB6L,IAArB,CAEA,CAIF,CAED,QAAS0c,UAAT,CAAoBlB,IAApB,CAA0B1qB,QAA1B,CAAqC,CAEpC,GAAI6rB,oBAAmB,CAAKnB,IAAI,CAACmB,mBAAL,SAAF,CAAwE,CAAxE,CAA6CnB,IAAI,CAACmB,mBAA5E,CAEA,GAAKnB,IAAI,CAAC1c,WAAV,CAEC,IAAM,GAAIrL,EAAC,CAAG,CAAR,CAAW4S,CAAC,CAAGmV,IAAI,CAAC1c,WAAL,CAAiBnL,MAAtC,CAA8CF,CAAC,CAAG4S,CAAlD,CAAqD5S,CAAC,EAAIkpB,mBAA1D,CAAgF,IAE3EtpB,EAAC,CAAGmoB,IAAI,CAAC1c,WAAL,CAAkBrL,CAAlB,CAFuE,CAG3EH,CAAC,CAA2B,CAAtB,CAAAqpB,mBAAF,CAA8BnB,IAAI,CAAC1c,WAAL,CAAkBrL,CAAC,CAAG,CAAtB,CAA9B,CAA0D,CAHa,CAI3EsJ,CAAC,CAA2B,CAAtB,CAAA4f,mBAAF,CAA8BnB,IAAI,CAAC1c,WAAL,CAAkBrL,CAAC,CAAG,CAAtB,CAA9B,CAA0D,CAJa,CAK3EmpB,CAAC,CAA2B,CAAtB,CAAAD,mBAAF,CAA8BnB,IAAI,CAAC1c,WAAL,CAAkBrL,CAAC,CAAG,CAAtB,CAA9B,CAA0D,CALa,CAO/E3C,QAAQ,CAACgO,WAAT,CAAqB3K,IAArB,CAA2B,GAAIqmB,QAAJ,CAAannB,CAAb,CAAgBC,CAAhB,CAAmByJ,CAAnB,CAAsB6f,CAAtB,CAA3B,CAEA,CAIF,GAAKpB,IAAI,CAACzc,WAAV,CAEC,IAAM,GAAItL,EAAC,CAAG,CAAR,CAAW4S,CAAC,CAAGmV,IAAI,CAACzc,WAAL,CAAiBpL,MAAtC,CAA8CF,CAAC,CAAG4S,CAAlD,CAAqD5S,CAAC,EAAIkpB,mBAA1D,CAAgF,IAE3E7oB,EAAC,CAAG0nB,IAAI,CAACzc,WAAL,CAAkBtL,CAAlB,CAFuE,CAG3EO,CAAC,CAA2B,CAAtB,CAAA2oB,mBAAF,CAA8BnB,IAAI,CAACzc,WAAL,CAAkBtL,CAAC,CAAG,CAAtB,CAA9B,CAA0D,CAHa,CAI3ES,CAAC,CAA2B,CAAtB,CAAAyoB,mBAAF,CAA8BnB,IAAI,CAACzc,WAAL,CAAkBtL,CAAC,CAAG,CAAtB,CAA9B,CAA0D,CAJa,CAK3EopB,CAAC,CAA2B,CAAtB,CAAAF,mBAAF,CAA8BnB,IAAI,CAACzc,WAAL,CAAkBtL,CAAC,CAAG,CAAtB,CAA9B,CAA0D,CALa,CAO/E3C,QAAQ,CAACiO,WAAT,CAAqB5K,IAArB,CAA2B,GAAIqmB,QAAJ,CAAa1mB,CAAb,CAAgBE,CAAhB,CAAmBE,CAAnB,CAAsB2oB,CAAtB,CAA3B,CAEA,CAIF/rB,QAAQ,CAACgsB,KAAT,CAAiBtB,IAAI,CAACsB,KAlCc,CAoC/BhsB,QAAQ,CAACgsB,KAAT,EAA0C,CAAxB,CAAAhsB,QAAQ,CAACgsB,KAAT,CAAenpB,MAAjC,GAAiD7C,QAAQ,CAACgO,WAAT,CAAqBnL,MAArB,GAAgC7C,QAAQ,CAACiO,WAAT,CAAqBpL,MAArD,EAA+D7C,QAAQ,CAACiO,WAAT,CAAqBpL,MAArB,GAAgC7C,QAAQ,CAAC+C,QAAT,CAAkBF,MAAlK,CApC+B,EAsCnCkO,OAAO,CAACqI,IAAR,CAAc,sCAAwCpZ,QAAQ,CAAC+C,QAAT,CAAkBF,MAA1D,CAAmE,kBAAnE,CACb7C,QAAQ,CAACiO,WAAT,CAAqBpL,MADR,CACiB,sBADjB,CAC0C7C,QAAQ,CAACgO,WAAT,CAAqBnL,MAD/D,CACwE,iBADtF,CAKD,CAED,QAASopB,cAAT,CAAwBvB,IAAxB,CAA8B1qB,QAA9B,CAAyC,CAExC,GAAIiQ,MAAK,CAAGya,IAAI,CAACza,KAAjB,CAEA,GAAKya,IAAI,CAACnqB,YAAL,SAAL,CAEC,IAAM,GAAIoC,EAAC,CAAG,CAAR,CAAW4S,CAAC,CAAGmV,IAAI,CAACnqB,YAAL,CAAkBsC,MAAvC,CAA+CF,CAAC,CAAG4S,CAAnD,CAAsD5S,CAAC,EAAvD,CAA6D,CAE5D3C,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,EAA6B,EAF+B,CAG5D3C,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,EAA2B2D,IAA3B,CAAkCokB,IAAI,CAACnqB,YAAL,CAAmBoC,CAAnB,EAAuB2D,IAHG,CAI5DtG,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,EAA2BI,QAA3B,CAAsC,EAJsB,CAS5D,OAEK8L,OAFL,CAHIqd,WAAW,CAAGlsB,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,EAA2BI,QAG7C,CAFIopB,WAAW,CAAGzB,IAAI,CAACnqB,YAAL,CAAmBoC,CAAnB,EAAuBI,QAEzC,CAAUuP,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAG4Z,WAAW,CAACtpB,MAAlC,CAA0CyP,CAAC,CAAGC,EAA9C,CAAkDD,CAAC,EAAI,CAAvD,CAEKzD,MAFL,CAEc,GAAI5J,QAFlB,CAGC4J,MAAM,CAACtM,CAAP,CAAW4pB,WAAW,CAAE7Z,CAAF,CAAX,CAAmBrC,KAH/B,CAICpB,MAAM,CAACrM,CAAP,CAAW2pB,WAAW,CAAE7Z,CAAC,CAAG,CAAN,CAAX,CAAuBrC,KAJnC,CAKCpB,MAAM,CAAC5C,CAAP,CAAWkgB,WAAW,CAAE7Z,CAAC,CAAG,CAAN,CAAX,CAAuBrC,KALnC,CAOCic,WAAW,CAAC7oB,IAAZ,CAAkBwL,MAAlB,CAID,CAIF,GAAK,SAAA6b,IAAI,CAAChqB,YAAV,CAEC,IAAM,GAAIiC,EAAC,CAAG,CAAR,CAAW4S,CAAC,CAAGmV,IAAI,CAAChqB,YAAL,CAAkBmC,MAAvC,CAA+CF,CAAC,CAAG4S,CAAnD,CAAsD5S,CAAC,EAAvD,CAEM,GAAI3C,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,CAAJ,CAAgC,CAE9B3C,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,EAA2BmL,OAA3B,CAAqC,EAFP,CAO9B,OAEMA,QAFN,CAHIse,UAAU,CAAGpsB,QAAQ,CAACO,YAAT,CAAuBoC,CAAvB,EAA2BmL,OAG5C,CAFIue,UAAU,CAAG3B,IAAI,CAAChqB,YAAL,CAAmBiC,CAAnB,EAAuBmL,OAExC,CAAUwE,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAG8Z,UAAU,CAACxpB,MAAjC,CAAyCyP,CAAC,CAAGC,EAA7C,CAAiDD,CAAC,EAAI,CAAtD,CAEMxE,OAFN,CAEgB,GAAI7I,QAFpB,CAGE6I,OAAO,CAACvL,CAAR,CAAY8pB,UAAU,CAAE/Z,CAAF,CAHxB,CAIExE,OAAO,CAACtL,CAAR,CAAY6pB,UAAU,CAAE/Z,CAAC,CAAG,CAAN,CAJxB,CAKExE,OAAO,CAAC7B,CAAR,CAAYogB,UAAU,CAAE/Z,CAAC,CAAG,CAAN,CALxB,CAOE8Z,UAAU,CAAC/oB,IAAX,CAAiByK,OAAjB,CAPF,CAWA9N,QAAQ,CAAC2F,iBAAT,GAED,CAMR,GAAK,SAAA+kB,IAAI,CAACtiB,WAAV,CAAsC,CAErC,GAAIzF,EAAJ,CAAO4S,CAAP,CAAUnS,CAAV,CAAakpB,EAAb,CAAiBC,SAAjB,CAA4BC,SAA5B,CAAuC3rB,KAAvC,CAEA,IAAM8B,CAAC,CAAG,CAAJ,CAAO4S,CAAC,CAAGmV,IAAI,CAACtiB,WAAL,CAAiBvF,MAAlC,CAA0CF,CAAC,CAAG4S,CAA9C,CAAiD5S,CAAC,EAAlD,CASC,IAPA3C,QAAQ,CAACoI,WAAT,CAAsBzF,CAAtB,EAA4B,EAO5B,CANA3C,QAAQ,CAACoI,WAAT,CAAsBzF,CAAtB,EAA0B2D,IAA1B,CAAiCokB,IAAI,CAACtiB,WAAL,CAAkBzF,CAAlB,EAAsB2D,IAMvD,CALAtG,QAAQ,CAACoI,WAAT,CAAsBzF,CAAtB,EAA0BkL,MAA1B,CAAmC,EAKnC,CAHA0e,SAAS,CAAGvsB,QAAQ,CAACoI,WAAT,CAAsBzF,CAAtB,EAA0BkL,MAGtC,CAFA2e,SAAS,CAAG9B,IAAI,CAACtiB,WAAL,CAAkBzF,CAAlB,EAAsBkL,MAElC,EAAMzK,CAAC,CAAG,CAAJ,CAAOkpB,EAAE,CAAGE,SAAS,CAAC3pB,MAA5B,EAAoCO,CAAC,CAAGkpB,EAAxC,CAA4ClpB,CAAC,EAAI,CAAjD,CAECvC,KAAK,CAAG,GAAIxB,MAAK,CAACsC,KAAV,CAAiB,QAAjB,CAFT,CAGCd,KAAK,CAACioB,MAAN,CAAc0D,SAAS,CAAEppB,CAAF,CAAvB,CAA8BopB,SAAS,CAAEppB,CAAC,CAAG,CAAN,CAAvC,CAAkDopB,SAAS,CAAEppB,CAAC,CAAG,CAAN,CAA3D,CAHD,CAICmpB,SAAS,CAAClpB,IAAV,CAAgBxC,KAAhB,CAMF,CAED,CAED,QAAS4rB,gBAAT,CAA0B/B,IAA1B,CAAgC1qB,QAAhC,CAA2C,IAEtC0sB,iBAAgB,CAAG,EAFmB,CAKtCC,UAAU,CAAG,EALyB,CAI1C;AAGKjC,IAAI,CAACkC,SAAL,SAPqC,EASzCD,UAAU,CAACtpB,IAAX,CAAiBqnB,IAAI,CAACkC,SAAtB,CATyC,CAarClC,IAAI,CAACiC,UAAL,SAbqC,GAepCjC,IAAI,CAACiC,UAAL,CAAgB9pB,MAfoB,CAiBxC8pB,UAAU,CAAGA,UAAU,CAACE,MAAX,CAAmBnC,IAAI,CAACiC,UAAxB,CAjB2B,CAqBxCA,UAAU,CAACtpB,IAAX,CAAiBqnB,IAAI,CAACiC,UAAtB,CArBwC,EA2B1C,IAAM,GAEDG,KAFC,CAAInqB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGgqB,UAAU,CAAC9pB,MAAhC,CAAwCF,CAAC,EAAzC,CAEKmqB,IAFL,CAEY5lB,aAAa,CAAC6lB,cAAd,CAA8BJ,UAAU,CAAEhqB,CAAF,CAAxC,CAA+C3C,QAAQ,CAACgsB,KAAxD,CAFZ,CAGMc,IAHN,EAGaJ,gBAAgB,CAACrpB,IAAjB,CAAuBypB,IAAvB,CAHb,CAOA;AACA,GAAK9sB,QAAQ,CAACO,YAAd,CAA6B,CAE5B;AACA,GAAIysB,oBAAmB,CAAG9lB,aAAa,CAACC,mCAAd,CAAmDnH,QAAQ,CAACO,YAA5D,CAA0E,EAA1E,CAA1B,CACAmsB,gBAAgB,CAAGA,gBAAgB,CAACG,MAAjB,CAAyBG,mBAAzB,CAEnB,CAE8B,CAA1B,CAAAN,gBAAgB,CAAC7pB,MA3CoB,GA2CP7C,QAAQ,CAAC2sB,UAAT,CAAsBD,gBA3Cf,CA6C1C,CAED,MAAO,UAAgBhC,IAAhB,CAAsBN,WAAtB,CAAoC,CAErC,SAAAM,IAAI,CAAC5T,IAFgC,GAKzC4T,IAAI,CAAGA,IAAI,CAAC5T,IAL6B,EAezC4T,IAAI,CAACza,KAfoC,CASrC,SAAAya,IAAI,CAACza,KATgC,CAe5B,CAf4B,CAW5B,EAAMya,IAAI,CAACza,KAXiB,CAmB1C,GAAIjQ,SAAQ,CAAG,GAAI9B,SAAnB,CAUA,GATA8B,QAAQ,CAACoI,WAAT,CAAuB,EASvB,CARA0iB,UAAU,CAAEJ,IAAF,CAAQ1qB,QAAR,CAQV,CAPA4rB,SAAS,CAAElB,IAAF,CAAQ1qB,QAAR,CAOT,CANAisB,aAAa,CAAEvB,IAAF,CAAQ1qB,QAAR,CAMb,CALAysB,eAAe,CAAE/B,IAAF,CAAQ1qB,QAAR,CAKf,CAHAA,QAAQ,CAACqR,kBAAT,EAGA,CAFArR,QAAQ,CAACiG,qBAAT,EAEA,CAAK,SAAAykB,IAAI,CAAC7F,SAAL,EAA0D,CAA1B,GAAA6F,IAAI,CAAC7F,SAAL,CAAehiB,MAApD,CAEC,MAAO,CAAE7C,QAAQ,CAAEA,QAAZ,CAAP,CAIA,GAAI6kB,UAAS,CAAG2E,MAAM,CAAC/lB,SAAP,CAAiBwpB,aAAjB,CAAgCvC,IAAI,CAAC7F,SAArC,CAAgDuF,WAAhD,CAA6D,WAA7D,CAAhB,CAGA,GAAIM,IAAI,CAAC7F,SAAL,CAAe,CAAf,EAAkBqI,KAAtB,CAA6B,CAE5B,GAAIC,SAAQ,CAAG/C,WAAW,CAAGM,IAAI,CAAC7F,SAAL,CAAe,CAAf,EAAkBqI,KAA/C,CAES,KAAKlD,YAJc,GAMrBmD,QANqB,aAMK,KAAKnD,YANV,GAU5B,GAAMtqB,aAAY,CAAG,GAAImqB,aAAJ,CAAiBsD,QAAjB,CAArB,CAEAntB,QAAQ,CAACM,MAAT,CAAkBZ,YAElB,CAeD,MAbImlB,UAAS,EAAuB,CAAnB,CAAAA,SAAS,CAAChiB,MAa3B,GAXEgiB,SAAS,CAAC,CAAD,CAAT,CAAa5jB,IAWf,CAZKypB,IAAI,CAAC7F,SAAL,CAAe,CAAf,EAAkBuI,WAYvB,CAXsB/tB,KAAK,CAAC+G,SAW5B,CAVYskB,IAAI,CAAC7F,SAAL,CAAe,CAAf,EAAkBwI,SAU9B,CATsBhuB,KAAK,CAACkH,QAS5B,CAPsBlH,KAAK,CAAC6B,UAO5B,CALUwpB,IAAI,CAAC7F,SAAL,CAAe,CAAf,EAAkByI,YAK5B,GAJQzI,SAAS,CAAC,CAAD,CAAT,CAAa0I,SAAb,CAAyBxgB,IAAI,CAAC8O,KAAL,CAAW6O,IAAI,CAAC7F,SAAL,CAAe,CAAf,EAAkByI,YAAlB,CAAiC,CAA5C,CAIjC,GAAO,CAAEttB,QAAQ,CAAEA,QAAZ,CAAsB6kB,SAAS,CAAEA,SAAjC,CAIR,CAED,CAjlBM,EA7D6B,CAArC,C;;;;;;;ACrCA;AAAA;AAAA;AAAA;AAAA,GAAIxlB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,CAAnB,CAwBA;;GAIA,QAAS4rB,OAAT,EAAkB,CAAE,CAEpBA,MAAM,CAACgE,QAAP,CAAkB,CAEjBC,QAAQ,CAAE,EAFO,CAIjBhnB,GAAG,CAAE,aAAWinB,KAAX,CAAkBjJ,MAAlB,CAA2B,CAE/B,KAAKgJ,QAAL,CAAcpqB,IAAd,CAAoBqqB,KAApB,CAA2BjJ,MAA3B,CAEA,CARgB,CAUjBkJ,GAAG,CAAE,aAAWC,IAAX,CAAkB,CAItB,OAFIH,SAAQ,CAAG,KAAKA,QAEpB,CAAU9qB,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGkY,QAAQ,CAAC5qB,MAA9B,CAAsCF,CAAC,CAAG4S,CAA1C,CAA6C5S,CAAC,EAAI,CAAlD,CAAsD,IAEjD+qB,MAAK,CAAGD,QAAQ,CAAE9qB,CAAF,CAFiC,CAGjD8hB,MAAM,CAAGgJ,QAAQ,CAAE9qB,CAAC,CAAG,CAAN,CAHgC,CAKrD,GAAK+qB,KAAK,CAACjT,IAAN,CAAYmT,IAAZ,CAAL,CAEC,MAAOnJ,OAIR,CAED,MAAO,KAEP,CA7BgB,C,CAiClB/gB,MAAM,CAAC+K,MAAP,CAAe+a,MAAM,CAAC/lB,SAAtB,CAAiC,CAEhCqhB,WAAW,CAAE,WAFmB,CAIhC+I,WAAW,CAAE,sBAAY,CAAE,CAJK,CAMhCC,cAAc,CAAE,yBAAY,CAAE,CANE,CAQhCC,cAAc,CAAE,yBAAY,CAAE,CARE,CAUhCd,aAAa,CAAE,uBAAWpI,SAAX,CAAsBuF,WAAtB,CAAmCtF,WAAnC,CAAiD,CAI/D,OAFIja,MAAK,CAAG,EAEZ,CAAUlI,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGkiB,SAAS,CAAChiB,MAA/B,CAAuC,EAAGF,CAA1C,CAECkI,KAAK,CAAElI,CAAF,CAAL,CAAa,KAAKqrB,cAAL,CAAqBnJ,SAAS,CAAEliB,CAAF,CAA9B,CAAqCynB,WAArC,CAAkDtF,WAAlD,CAAb,CAID,MAAOja,MAEP,CAtB+B,CAwBhCmjB,cAAc,CAAI,UAAY,IAEzBC,aAAY,CAAG,CAClBC,UAAU,CAAEA,gDADM,CAElBC,cAAc,CAAEA,oDAFE,CAGlBC,gBAAgB,CAAEA,sDAHA,CAIlBC,mBAAmB,CAAEA,yDAJH,CAKlBC,gBAAgB,CAAEA,sDALA,CAMlBC,cAAc,CAAEA,oDANE,CAFU,CAWzB1tB,KAAK,CAAG,GAAIc,4CAXa,CAYzB6sB,aAAa,CAAG,GAAIC,oDAZK,CAazBC,cAAc,CAAG,GAAIC,qDAbI,CAe7B,MAAO,UAAyBjR,CAAzB,CAA4B0M,WAA5B,CAAyCtF,WAAzC,CAAuD,CAM7D,QAAS8J,YAAT,CAAsBC,IAAtB,CAA4BC,MAA5B,CAAoCzsB,MAApC,CAA4C0sB,IAA5C,CAAkDC,UAAlD,CAA+D,IAK1DtQ,QAL0D,CAE1DyO,QAAQ,CAAG/C,WAAW,CAAGyE,IAFiC,CAG1DpK,MAAM,CAAG+E,MAAM,CAACgE,QAAP,CAAgBG,GAAhB,CAAqBR,QAArB,CAHiD,CAO9C,IAAX,GAAA1I,MAPyD,EAa7D+J,aAAa,CAACS,cAAd,CAA8BnK,WAA9B,CAb6D,CAc7DpG,OAAO,CAAG8P,aAAa,CAAC3K,IAAd,CAAoBsJ,QAApB,CAdmD,EAS7DzO,OAAO,CAAG+F,MAAM,CAACZ,IAAP,CAAasJ,QAAb,CATmD,CAkBzD,SAAA2B,MAlByD,GAoB7DpQ,OAAO,CAACoQ,MAAR,CAAelkB,SAAf,CAA0BkkB,MAA1B,CApB6D,CAsBxC,CAAhB,GAAAA,MAAM,CAAE,CAAF,CAtBkD,GAsBpCpQ,OAAO,CAACwQ,KAAR,CAAgBC,oDAtBoB,EAuBxC,CAAhB,GAAAL,MAAM,CAAE,CAAF,CAvBkD,GAuBpCpQ,OAAO,CAAC0Q,KAAR,CAAgBD,oDAvBoB,GA2BzD,SAAA9sB,MA3ByD,EA6B7Dqc,OAAO,CAACrc,MAAR,CAAeuI,SAAf,CAA0BvI,MAA1B,CA7B6D,CAiCzD,SAAA0sB,IAjCyD,GAmC1C,QAAd,GAAAA,IAAI,CAAE,CAAF,CAnCoD,GAmC/BrQ,OAAO,CAACwQ,KAAR,CAAgBC,oDAnCe,EAoC1C,QAAd,GAAAJ,IAAI,CAAE,CAAF,CApCoD,GAoC/BrQ,OAAO,CAACwQ,KAAR,CAAgBG,4DApCe,EAsC1C,QAAd,GAAAN,IAAI,CAAE,CAAF,CAtCoD,GAsC/BrQ,OAAO,CAAC0Q,KAAR,CAAgBD,oDAtCe,EAuC1C,QAAd,GAAAJ,IAAI,CAAE,CAAF,CAvCoD,GAuC/BrQ,OAAO,CAAC0Q,KAAR,CAAgBC,4DAvCe,GA2CzD,SAAAL,UA3CyD,GA6C7DtQ,OAAO,CAACsQ,UAAR,CAAqBA,UA7CwC,EAiD9D,GAAI3pB,KAAI,CAAGqI,+CAAS,CAACC,YAAV,EAAX,CAIA,MAFA2hB,SAAQ,CAAEjqB,IAAF,CAAR,CAAmBqZ,OAEnB,CAAOrZ,IAEP,CAED;AA7DA;AAF6D,GAIzDiqB,SAAQ,CAAG,EAJ8C,CAiEzD5E,IAAI,CAAG,CACVrlB,IAAI,CAAEqI,+CAAS,CAACC,YAAV,EADI,CAEVC,IAAI,CAAE,qBAFI,CAjEkD,CAsE7D,IAAM,GAAItH,KAAV,GAAkBoX,EAAlB,CAAsB,CAErB,GAAIzH,MAAK,CAAGyH,CAAC,CAAEpX,IAAF,CAAb,CAEA,OAASA,IAAT,EAEC,IAAK,UAAL,CACA,IAAK,UAAL,CACA,IAAK,gBAAL,CACA,IAAK,cAAL,CACC,MACD,IAAK,SAAL,CACCokB,IAAI,CAACpkB,IAAL,CAAY2P,KADb,CAEC,MACD,IAAK,UAAL,CACCyU,IAAI,CAAC6E,QAAL,CAAgBtB,YAAY,CAAEhY,KAAF,CAD7B,CAEC,MACD,IAAK,cAAL,CACA,IAAK,YAAL,CACClF,OAAO,CAACqI,IAAR,CAAc,8BAAd,CAA8C9S,IAA9C,CAAoD,yBAApD,CADD,CAEC,MACD,IAAK,cAAL,CACCokB,IAAI,CAAC7pB,KAAL,CAAaA,KAAK,CAAC+J,SAAN,CAAiBqL,KAAjB,EAAyBU,MAAzB,EADd,CAEC,MACD,IAAK,eAAL,CACC+T,IAAI,CAAC8E,QAAL,CAAgB3uB,KAAK,CAAC+J,SAAN,CAAiBqL,KAAjB,EAAyBU,MAAzB,EADjB,CAEC,MACD,IAAK,eAAL,CACC+T,IAAI,CAAC+E,QAAL,CAAgB5uB,KAAK,CAAC+J,SAAN,CAAiBqL,KAAjB,EAAyBU,MAAzB,EADjB,CAEC,MACD,IAAK,cAAL,CACC+T,IAAI,CAAC6C,SAAL,CAAiBtX,KADlB,CAEC,MACD,IAAK,SAAL,CAC8B,OAAxB,GAAAA,KAAK,CAAC2U,WAAN,EADN,GACwCF,IAAI,CAAC9c,IAAL,CAAY,mBADpD,EAE8B,OAAxB,GAAAqI,KAAK,CAAC2U,WAAN,EAFN,GAEwCF,IAAI,CAAC9c,IAAL,CAAY,mBAFpD,EAG8B,UAAxB,GAAAqI,KAAK,CAAC2U,WAAN,EAHN,GAG2CF,IAAI,CAAC9c,IAAL,CAAY,sBAHvD,EAIC,MACD,IAAK,YAAL,CACC8c,IAAI,CAAC9oB,GAAL,CAAWgtB,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAACgS,gBAAX,CAA6BhS,CAAC,CAACiS,gBAA/B,CAAiDjS,CAAC,CAACkS,cAAnD,CAAmElS,CAAC,CAACmS,oBAArE,CADvB,CAEC,MACD,IAAK,kBAAL,CACA,IAAK,kBAAL,CACA,IAAK,gBAAL,CACA,IAAK,sBAAL,CACC,MACD,IAAK,aAAL,CACCnF,IAAI,CAACoF,WAAL,CAAmBlB,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAACqS,iBAAX,CAA8BrS,CAAC,CAACsS,iBAAhC,CAAmDtS,CAAC,CAACuS,eAArD,CAAsEvS,CAAC,CAACwS,qBAAxE,CAD/B,CAEC,MACD,IAAK,mBAAL,CACA,IAAK,mBAAL,CACA,IAAK,iBAAL,CACA,IAAK,uBAAL,CACC,MACD,IAAK,UAAL,CACCxF,IAAI,CAACyF,QAAL,CAAgBvB,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAAC0S,cAAX,CAA2B1S,CAAC,CAAC2S,cAA7B,CAA6C3S,CAAC,CAAC4S,YAA/C,CAA6D5S,CAAC,CAAC6S,kBAA/D,CAD5B,CAEC,MACD,IAAK,gBAAL,CACA,IAAK,gBAAL,CACA,IAAK,cAAL,CACA,IAAK,oBAAL,CACC,MACD,IAAK,OAAL,CACC7F,IAAI,CAAC8F,KAAL,CAAa5B,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAAC+S,WAAX,CAAwB/S,CAAC,CAACgT,WAA1B,CAAuChT,CAAC,CAACiT,SAAzC,CAAoDjT,CAAC,CAACkT,eAAtD,CADzB,CAEC,MACD,IAAK,aAAL,CACA,IAAK,aAAL,CACA,IAAK,WAAL,CACA,IAAK,iBAAL,CACC,MACD,IAAK,SAAL,CACClG,IAAI,CAACmG,OAAL,CAAejC,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAACoT,aAAX,CAA0BpT,CAAC,CAACqT,aAA5B,CAA2CrT,CAAC,CAACsT,WAA7C,CAA0DtT,CAAC,CAACuT,iBAA5D,CAD3B,CAEC,MACD,IAAK,cAAL,CACCvG,IAAI,CAACwG,SAAL,CAAiBjb,KADlB,CAEC,MACD,IAAK,eAAL,CACA,IAAK,eAAL,CACA,IAAK,aAAL,CACA,IAAK,mBAAL,CACC,MACD,IAAK,WAAL,CACCyU,IAAI,CAACyG,SAAL,CAAiBvC,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAAC0T,eAAX,CAA4B1T,CAAC,CAAC2T,eAA9B,CAA+C3T,CAAC,CAAC4T,aAAjD,CAAgE5T,CAAC,CAAC6T,mBAAlE,CAD7B,CAEC,MACD,IAAK,iBAAL,CACC7G,IAAI,CAAC8G,WAAL,CAAmBvb,KADpB,CAEC,MACD,IAAK,iBAAL,CACA,IAAK,iBAAL,CACA,IAAK,eAAL,CACA,IAAK,qBAAL,CACC,MACD,IAAK,aAAL,CACCyU,IAAI,CAAC+G,WAAL,CAAmB7C,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAACgU,iBAAX,CAA8BhU,CAAC,CAACiU,iBAAhC,CAAmDjU,CAAC,CAACkU,eAArD,CAAsElU,CAAC,CAACmU,qBAAxE,CAD/B,CAEC,MACD,IAAK,mBAAL,CACA,IAAK,mBAAL,CACA,IAAK,iBAAL,CACA,IAAK,uBAAL,CACC,MACD,IAAK,cAAL,CACCnH,IAAI,CAACoH,YAAL,CAAoBlD,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAACqU,kBAAX,CAA+BrU,CAAC,CAACsU,kBAAjC,CAAqDtU,CAAC,CAACuU,gBAAvD,CAAyEvU,CAAC,CAACwU,sBAA3E,CADhC,CAEC,MACD,IAAK,oBAAL,CACA,IAAK,oBAAL,CACA,IAAK,kBAAL,CACA,IAAK,wBAAL,CACC,MACD,IAAK,cAAL,CACCxH,IAAI,CAACyH,YAAL,CAAoBvD,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAAC0U,kBAAX,CAA+B1U,CAAC,CAAC2U,kBAAjC,CAAqD3U,CAAC,CAAC4U,gBAAvD,CAAyE5U,CAAC,CAAC6U,sBAA3E,CADhC,CAEC,MACD,IAAK,oBAAL,CACA,IAAK,oBAAL,CACA,IAAK,kBAAL,CACA,IAAK,wBAAL,CACC,MACD,IAAK,UAAL,CACC7H,IAAI,CAAC8H,QAAL,CAAgB5D,WAAW,CAAE3Y,KAAF,CAASyH,CAAC,CAAC+U,cAAX,CAA2B/U,CAAC,CAACgV,cAA7B,CAA6ChV,CAAC,CAACiV,YAA/C,CAA6DjV,CAAC,CAACkV,kBAA/D,CAD5B,CAEC,MACD,IAAK,gBAAL,CACA,IAAK,gBAAL,CACA,IAAK,cAAL,CACA,IAAK,oBAAL,CACC,MACD,IAAK,WAAL,CACClI,IAAI,CAACzpB,IAAL,CAAYsF,8CADb,CAEC,MACD,IAAK,aAAL,CACCmkB,IAAI,CAACzpB,IAAL,CAAYC,gDADb,CAEC,MACD,IAAK,cAAL,CACC6P,OAAO,CAACqI,IAAR,CAAc,uEAAd,CADD,CAECsR,IAAI,CAACtqB,OAAL,CAAe6V,KAFhB,CAGC,MACD,IAAK,WAAL,CACA,IAAK,YAAL,CACA,IAAK,YAAL,CACA,IAAK,SAAL,CACA,IAAK,cAAL,CACA,IAAK,aAAL,CACA,IAAK,SAAL,CACA,IAAK,WAAL,CACCyU,IAAI,CAAEpkB,IAAF,CAAJ,CAAe2P,KADhB,CAEC,MACD,IAAK,cAAL,CACM,KAAAA,KADN,GACuByU,IAAI,CAACvpB,YAAL,CAAoBC,kDAD3C,EAEgB,MAAV,GAAA6U,KAFN,GAEyByU,IAAI,CAACvpB,YAAL,CAAoBgf,gDAF7C,EAGC,MACD,QACCpP,OAAO,CAACC,KAAR,CAAe,0CAAf,CAA2D1K,IAA3D,CAAiE2P,KAAjE,CADD,CAhJD,CAsJA,CASD,MAPmB,mBAAd,GAAAyU,IAAI,CAAC9c,IAOV,EAPyC,MAAO8c,KAAI,CAAC+E,QAOrD,CANmB,mBAAd,GAAA/E,IAAI,CAAC9c,IAMV,EANyC,MAAO8c,KAAI,CAAC8E,QAMrD,CAJoB,CAAf,CAAA9E,IAAI,CAACtqB,OAIV,GAJwBsqB,IAAI,CAAC1pB,WAAL,GAIxB,EAFA0tB,cAAc,CAACmE,WAAf,CAA4BvD,QAA5B,CAEA,CAAOZ,cAAc,CAAC/J,KAAf,CAAsB+F,IAAtB,CAEP,CAED,CA5Pe,EAxBgB,CAAjC,C;;;;;;AC/DA,GAAIrrB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,CAAnB,CAEA;;;;;;;;GASA2B,OAAO,CAACsqB,YAAR,CAAuB,SAASiJ,KAAT,CAAiB,CAEvC,GAAIC,MAAK,CAAG,IAAZ,CACA,KAAK7F,KAAL,OAHuC,CAIvC,KAAK1rB,YAAL,OAJuC,IAUnCwxB,YAAW,CAAM,CAVkB,CAWnCC,cAAc,CAAG,CAXkB,CAYnCC,iBAAiB,GAZkB,CAsDvC;AA6BA;AAlCA,KAAKxqB,YAAL,CAAoB,SAASV,IAAT,CAAezD,QAAf,CAAwB,CAC3C,GAAI4uB,WAAU,CAAGnrB,IAAI,CAAGzD,QAAP,CAAkBwuB,KAAK,CAAC7F,KAAN,CAAY3oB,QAA/C,CACAwuB,KAAK,CAAC7F,KAAN,CAAYkG,WAAZ,CAA0BD,UAC1B,CApDsC,CAuDtC,KAAKE,gBAAL,CAAwB,UAAW,CAClC,MAAON,MAAK,CAAC7F,KAAN,CAAY3oB,QACpB,CAzDsC,CA2DvC,KAAK9C,wBAAL,CAAgC,UAAU,CAMzC,MALAsxB,MAAK,CAACvxB,YAAN,CAAqB,GAAInC,MAAK,CAACi0B,YAAV,CAAwBP,KAAK,CAAC7F,KAA9B,CAKrB,CAJA6F,KAAK,CAACvxB,YAAN,CAAmB+xB,SAAnB,CAA+Bl0B,KAAK,CAACm0B,YAIrC,CAHAT,KAAK,CAACvxB,YAAN,CAAmBiyB,SAAnB,CAA+Bp0B,KAAK,CAACm0B,YAGrC,CAFAT,KAAK,CAACvxB,YAAN,CAAmBkyB,MAAnB,CAA4Br0B,KAAK,CAACs0B,SAElC,CADEZ,KAAK,CAAC7F,KAAN,CAAYkG,WAAZ,CAA0B,CAC5B,CAAOL,KAAK,CAACvxB,YACb,CAlEsC,CAoEvC,KAAKsG,cAAL,CAAsB,SAASvD,QAAT,CAAmB,OACpCwuB,MAAK,CAAC7F,KAD8B,CAEhC3oB,QAAQ,EAAIwuB,KAAK,CAAC7F,KAAN,CAAYkG,WAAZ,CAA0BL,KAAK,CAAC7F,KAAN,CAAY3oB,QAA1C,CAFwB,CAIhC,CACR,CAzEsC,CA2EvC,KAAKqvB,aAAL,CAAqB,UAAU,CAC9B;AAD8B,SAE1Bb,KAAK,CAAC7F,KAAN,EAAyC,CAA1B,EAAA6F,KAAK,CAAC7F,KAAN,CAAYlS,UAFD,CAM9B,CAjFsC,CAsCtB,QAAboE,WAAa,EAAU,CACtByU,QADsB,GAEvBd,KAAK,CAAC7F,KAAN,CAAc2G,QAAQ,CAACC,aAAT,CAAwB,OAAxB,CAFS,CAGvBf,KAAK,CAAC7F,KAAN,CAAYpI,WAAZ,CAA0B,WAHH,CAIvBiO,KAAK,CAAC7F,KAAN,CAAYzO,GAAZ,CArCMqU,KAiCiB,CAKvBC,KAAK,CAAC7F,KAAN,CAAYrJ,IAAZ,EALuB,CAMpBkP,KAAK,CAAC7F,KAAN,CAAY9lB,IAAZ,GANoB,CAS1B,CAqCD,EAEA,C;;;;;;GCjGK/H,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfm2B,MAAM,CAAGn2B,mBAAO,CAAC,EAAD,CAAP,CAA2Bm2B,M,CAWpC11B,QAAQ,CAAG,UAAY,CAC1BT,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CAD2B,CAE3B,KAAKu0B,UAAL,GAF2B,CAI3B,8DACA,GAAMC,mBAAkB,CAAG,IAAM,CAC/B,GAAIrV,MAAK,CAAG,GAAIJ,MAAhB,CACAI,KAAK,CAACH,GAAN,CAAY7gB,mBAAO,CAAC,EAAD,CAFY,CAG/B,GAAM8gB,QAAO,CAAG,GAAIrf,MAAK,CAACsf,OAA1B,CAGA,MAFAD,QAAO,CAACE,KAAR,CAAgBA,KAEhB,CADAF,OAAO,CAAClY,WAAR,GACA,CAAOkY,OACR,CAPD,CASA;;;;;;;;;;KAd2B,CAmC3B;;;;KAnC2B,CA+C3B;;;;;KAtBA,KAAK9e,UAAL,CAAkB,CAACC,UAAD,CAAaC,UAAb,CAAyBC,OAAzB,GAAqC,CACrD,GAAIF,UAAU,EAAIC,UAAlB,CAA8B,IACxBE,SAAQ,CAAG,KAAKE,gBAAL,CAAsBL,UAAtB,CAAkCE,OAAlC,CADa,CAEtB2e,OAAO,CAAGuV,kBAAkB,EAFN,CAG5Bn0B,UAAU,CAAC8B,GAAX,CAAiB8c,OAHW,CAI5B,GAAIpJ,MAAK,CAAG,GAAIye,OAAJ,CAAW/zB,QAAX,CAAqBF,UAArB,CAAZ,CACA,KAAKiC,OAAL,CAAauT,KAAb,CAAoBvV,OAAO,CAACS,gBAA5B,CAA8CT,OAAO,CAACU,gBAAtD,CACD,CACF,CAjC0B,CAwC3B,KAAKyzB,OAAL,CAAerV,IAAI,EAAI,CACjB,KAAK5e,KAAL,EAAc,KAAKA,KAAL,CAAWI,QADR,GAEnB,KAAKJ,KAAL,CAAWI,QAAX,CAAoBwe,IAApB,CAA2BA,IAFR,CAGnB,KAAK5e,KAAL,CAAWI,QAAX,CAAoBmG,WAApB,GAHmB,CAKtB,CA7C0B,CAqD3B,KAAK2tB,kBAAL,CAA0B5qB,IAAI,EAAI,CAC5B,KAAKtJ,KAAL,EAAc,KAAKA,KAAL,CAAWI,QADG,GAE9B,KAAKJ,KAAL,CAAWI,QAAX,CAAoBof,eAApB,CAAsClW,IAFR,CAG9B,KAAKtJ,KAAL,CAAWI,QAAX,CAAoBmG,WAApB,GAH8B,CAKjC,CACF,C,CAEDnI,QAAQ,CAACoF,SAAT,CAAqBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CACrBlE,OAAO,CAAClB,QAAR,CAAmBA,Q;;;;;;;AC1EnB;AAAA;AAAA;AAAA;GAWM+1B,eAAc,CAAG,aAAc,GAAI9mB,8C,CACnC+mB,IAAI,CAAG,aAAc,GAAIC,0C,CACzBC,OAAO,CAAG,aAAc,GAAIthB,6C,CAC5BuhB,SAAS,CAAG,aAAc,GAAIvvB,8C,CAC9BwvB,OAAO,CAAG,aAAc,GAAIxvB,8C,CAC5ByvB,MAAM,CAAG,aAAc,GAAIzvB,8C,CAEjC,KAAM8uB,OAAN,QAAqBvmB,+CAAS,CAE7BmB,WAAW,EAAqE,IAAnE3O,SAAmE,wDAAxD,GAAIW,qDAAoD,CAAlCN,QAAkC,wDAAvB,GAAIs0B,qDAAmB,CAE/E,OAF+E,CAI/E,KAAK/mB,IAAL,CAAY,QAJmE,CAM/E,KAAK5N,QAAL,CAAgBA,QAN+D,CAO/E,KAAKK,QAAL,CAAgBA,QAP+D,CAS/E,KAAKu0B,kBAAL,EAEA,CAED1iB,IAAI,CAAEuF,MAAF,CAAW,CAOd,MALA,OAAMvF,IAAN,CAAYuF,MAAZ,CAKA,CAHA,KAAKpX,QAAL,CAAgBoX,MAAM,CAACpX,QAGvB,CAFA,KAAKL,QAAL,CAAgByX,MAAM,CAACzX,QAEvB,CAAO,IAEP,CAED60B,OAAO,CAAEC,SAAF,CAAaC,UAAb,CAA0B,IAE1B/0B,SAAQ,CAAG,KAAKA,QAFU,CAG1BoL,WAAW,CAAG,KAAKA,WAHO,CAI1B4pB,SAAS,CAAGF,SAAS,CAACxK,MAAV,CAAiByJ,MAAjB,CAAwBiB,SAJV,CAKxBC,SAAS,CAAGj1B,QAAQ,CAACi1B,SALG,CAehC,GANiC,IAA5B,GAAAj1B,QAAQ,CAACmO,cAMd,EANwCnO,QAAQ,CAACiG,qBAAT,EAMxC,CAJAsuB,OAAO,CAACriB,IAAR,CAAclS,QAAQ,CAACmO,cAAvB,CAIA,CAHAomB,OAAO,CAACppB,YAAR,CAAsBC,WAAtB,CAGA,CAFAmpB,OAAO,CAAChjB,MAAR,EAAkByjB,SAElB,CAAK,KAAAF,SAAS,CAACI,GAAV,CAAcC,gBAAd,CAAgCZ,OAAhC,CAAL,EAIAH,cAAc,CAACliB,IAAf,CAAqB9G,WAArB,EAAmCgqB,MAAnC,EAJA,CAKAf,IAAI,CAACniB,IAAL,CAAW4iB,SAAS,CAACI,GAArB,EAA2B/pB,YAA3B,CAAyCipB,cAAzC,CALA,IAOMiB,eAAc,CAAGL,SAAS,EAAK,CAAE,KAAK/kB,KAAL,CAAW1N,CAAX,CAAe,KAAK0N,KAAL,CAAWzN,CAA1B,CAA8B,KAAKyN,KAAL,CAAWhE,CAA3C,EAAiD,CAAtD,CAPhC,CAQMqpB,gBAAgB,CAAGD,cAAc,CAAGA,cAR1C,CAUA,GAAKr1B,QAAQ,CAACu1B,gBAAd,CAAiC,IAE1BzkB,MAAK,CAAG9Q,QAAQ,CAAC8Q,KAFS,CAG1BlQ,UAAU,CAAGZ,QAAQ,CAACY,UAHI,CAI1B40B,iBAAiB,CAAG50B,UAAU,CAACoG,QAJL,CAKvByuB,aAAa,CAAGz1B,QAAQ,CAACqB,eAAT,CAAyB2F,QALlB,CAOhC,GAAe,IAAV,GAAA8J,KAAL,CAKC,OAEO9N,EAFP,CAHMmO,KAAK,CAAGpE,IAAI,CAAC7K,GAAL,CAAU,CAAV,CAAa+yB,SAAS,CAAC9jB,KAAvB,CAGd,CAFMukB,GAAG,CAAG3oB,IAAI,CAAC3K,GAAL,CAAU0O,KAAK,CAACnG,KAAhB,CAAyBsqB,SAAS,CAAC9jB,KAAV,CAAkB8jB,SAAS,CAACtqB,KAArD,CAEZ,CAAUhI,CAAC,CAAGwO,KAAd,CAA+BxO,CAAC,CAAN+yB,GAA1B,CAAuC/yB,CAAC,EAAxC,CAEOK,CAFP,CAEW8N,KAAK,CAACM,IAAN,CAAYzO,CAAZ,CAFX,CAIMgzB,iBAAiB,CAAE,IAAF,CAAQH,iBAAR,CAA2BC,aAA3B,CAA0CzyB,CAA1C,CAJvB,CAMC4yB,SAAS,CAAEpB,SAAF,CAAaxxB,CAAb,CAAgBsyB,gBAAhB,CAAkClqB,WAAlC,CAA+C0pB,SAA/C,CAA0DC,UAA1D,CAAsE,IAAtE,CANV,CALD,IAoBC,QAHM5jB,OAAK,CAAGpE,IAAI,CAAC7K,GAAL,CAAU,CAAV,CAAa+yB,SAAS,CAAC9jB,KAAvB,CAGd,CAFMukB,IAAG,CAAG3oB,IAAI,CAAC3K,GAAL,CAAUozB,iBAAiB,CAAC7qB,KAA5B,CAAqCsqB,SAAS,CAAC9jB,KAAV,CAAkB8jB,SAAS,CAACtqB,KAAjE,CAEZ,CAAUhI,EAAC,CAAGwO,MAAd,CAA8BxO,EAAC,CAAN+yB,IAAzB,CAAqC/yB,EAAC,EAAtC,CAEMgzB,iBAAiB,CAAE,IAAF,CAAQH,iBAAR,CAA2BC,aAA3B,CAA0C9yB,EAA1C,CAFvB,CAICizB,SAAS,CAAEpB,SAAF,CAAa7xB,EAAb,CAAgB2yB,gBAAhB,CAAkClqB,WAAlC,CAA+C0pB,SAA/C,CAA0DC,UAA1D,CAAsE,IAAtE,CAMX,CArCD,IAuCChkB,QAAO,CAACC,KAAR,CAAe,6FAAf,CAjDD,CAEA;AAmDA,CAED4jB,kBAAkB,EAAG,CAEpB,GAAM50B,SAAQ,CAAG,KAAKA,QAAtB,CAEA,GAAKA,QAAQ,CAACu1B,gBAAd,CAAiC,IAE1Bl0B,gBAAe,CAAGrB,QAAQ,CAACqB,eAFD,CAG1Bub,IAAI,CAAGlZ,MAAM,CAACkZ,IAAP,CAAavb,eAAb,CAHmB,CAKhC,GAAmB,CAAd,CAAAub,IAAI,CAAC/Z,MAAV,CAAuB,CAEtB,GAAMkE,eAAc,CAAG1F,eAAe,CAAEub,IAAI,CAAE,CAAF,CAAN,CAAtC,CAEA,GAAK7V,cAAc,SAAnB,CAAoC,CAEnC,KAAKuB,qBAAL,CAA6B,EAFM,CAGnC,KAAKutB,qBAAL,CAA6B,EAHM,CAKnC,IAAM,GAECvvB,KAFD,CAAIoX,CAAC,CAAG,CAAR,CAAWC,EAAE,CAAG5W,cAAc,CAAClE,MAArC,CAA6C6a,CAAC,CAAGC,EAAjD,CAAqDD,CAAC,EAAtD,CAEOpX,IAFP,CAEcS,cAAc,CAAE2W,CAAF,CAAd,CAAoBpX,IAApB,EAAoCoX,CAApC,GAFd,CAIC,KAAKpV,qBAAL,CAA2BjF,IAA3B,CAAiC,CAAjC,CAJD,CAKC,KAAKwyB,qBAAL,CAA4BvvB,IAA5B,EAAqCoX,CAItC,CAED,CAED,CA3BD,IA2BO,CAEN,GAAMnd,aAAY,CAAGP,QAAQ,CAACO,YAA9B,CAEKA,YAAY,SAAZ,EAAoD,CAAtB,CAAAA,YAAY,CAACsC,MAJ1C,EAMLkO,OAAO,CAACC,KAAR,CAAe,sGAAf,CAID,CAED,CA3I4B,CA+I9B+iB,MAAM,CAACtwB,SAAP,CAAiB+V,QAAjB,G,CAEA,QAASoc,UAAT,CAAoBtgB,KAApB,CAA2BxE,KAA3B,CAAkCwkB,gBAAlC,CAAoDlqB,WAApD,CAAiE0pB,SAAjE,CAA4EC,UAA5E,CAAwFxb,MAAxF,CAAiG,CAEhG,GAAMuc,mBAAkB,CAAGzB,IAAI,CAAC0B,iBAAL,CAAwBzgB,KAAxB,CAA3B,CAEA,GAAKwgB,kBAAkB,CAAGR,gBAA1B,CAA6C,CAE5C,GAAMU,eAAc,CAAG,GAAI/wB,8CAA3B,CAEAovB,IAAI,CAAC4B,mBAAL,CAA0B3gB,KAA1B,CAAiC0gB,cAAjC,CAJ4C,CAK5CA,cAAc,CAAC7qB,YAAf,CAA6BC,WAA7B,CAL4C,CAO5C,GAAMZ,SAAQ,CAAGsqB,SAAS,CAACI,GAAV,CAAcgB,MAAd,CAAqBprB,UAArB,CAAiCkrB,cAAjC,CAAjB,CAEA,GAAKxrB,QAAQ,CAAGsqB,SAAS,CAACqB,IAArB,EAA6B3rB,QAAQ,CAAGsqB,SAAS,CAACsB,GAAvD,CAA6D,OAE7DrB,UAAU,CAAC1xB,IAAX,CAAiB,CAEhBmH,QAAQ,CAAEA,QAFM,CAGhB6rB,aAAa,CAAEtpB,IAAI,CAACmZ,IAAL,CAAW4P,kBAAX,CAHC,CAIhBxgB,KAAK,CAAE0gB,cAJS,CAKhBllB,KAAK,CAAEA,KALS,CAMhB5B,IAAI,CAAE,IANU,CAOhBqK,MAAM,CAAEA,MAPQ,CAAjB,CAWA,CAED,CAED,QAASoc,kBAAT,CAA4Bpc,MAA5B,CAAoCvS,QAApC,CAA8CyuB,aAA9C,CAA6DzyB,CAA7D,CAAiE,CAE/DwxB,SAAS,CAAC9jB,mBAAV,CAA+B1J,QAA/B,CAAyChE,CAAzC,CAF+D,CAI/D,GAAMszB,gBAAe,CAAG/c,MAAM,CAACjR,qBAA/B,CAEA,GAAKiR,MAAM,CAAClZ,QAAP,CAAgBE,YAAhB,EAAgCk1B,aAAhC,EAAiDa,eAAtD,CAAwE,CAEtE7B,OAAO,CAACjpB,GAAR,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAFsE,CAItE,IAAM,GAAI7I,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAGwmB,aAAa,CAAC5yB,MAApC,CAA4CF,CAAC,CAAGsM,EAAhD,CAAoDtM,CAAC,EAArD,CAA2D,IAEnD4zB,UAAS,CAAGD,eAAe,CAAE3zB,CAAF,CAFwB,CAGnDoE,cAAc,CAAG0uB,aAAa,CAAE9yB,CAAF,CAHqB,CAKtC,CAAd,GAAA4zB,SALoD,GAOzD7B,MAAM,CAAChkB,mBAAP,CAA4B3J,cAA5B,CAA4C/D,CAA5C,CAPyD,CASzDyxB,OAAO,CAAC+B,eAAR,CAAyB9B,MAAM,CAAC+B,GAAP,CAAYjC,SAAZ,CAAzB,CAAkD+B,SAAlD,CATyD,CAW1D,CAED/B,SAAS,CAAC/tB,GAAV,CAAeguB,OAAf,CAED,CAEF,C;;;;;;AC5ND,iCAAiC,o1D;;;;;;GCA3Bp1B,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAWfU,KAAK,CAAG,UAAY,CAIxB;;;;;;;;;;KAJwB,CA0BxB;;;;KAzBCV,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CADwB,CAEzB,KAAKi3B,OAAL,GAFyB,CAezB,KAAKC,iBAAL,CAAyB,CAAC92B,UAAD,CAAaC,UAAb,CAAyBC,OAAzB,GAAqC,CAC7D,GAAIF,UAAU,EAAIC,UAAlB,CAA8B,CAC7B,GAAIE,SAAQ,CAAG,KAAKE,gBAAL,CAAsBL,UAAtB,CAAkCE,OAAlC,CAAf,CACIA,OAAO,CAACU,gBAAR,EAA4BT,QAAQ,CAACqB,eAAT,MAFH,GAG5BvB,UAAU,CAACwB,eAAX,CAA8B1D,mBAAO,CAAC,CAAD,CAAP,CAA2B2D,iBAA5B,EAHD,EAI1B,GAAIq1B,KAAI,CAAG,IAAKh5B,mBAAO,CAAC,EAAD,CAAP,CAAsCi5B,YAA3C,EAAyD72B,QAAzD,CAAmEF,UAAnE,CAAX,CACH,KAAKiC,OAAL,CAAa60B,IAAb,CAAmB72B,OAAO,CAACS,gBAA3B,CAA6CT,OAAO,CAACU,gBAArD,CACA,CACD,CAvBwB,CA+BzB,KAAKq2B,QAAL,CAAgBC,KAAK,EAAI,CACpB,KAAK92B,KAAL,EAAc,KAAKA,KAAL,CAAWI,QADL,GAEvB,KAAKJ,KAAL,CAAWI,QAAX,CAAoB22B,SAApB,CAAgCD,KAFT,CAGvB,KAAK92B,KAAL,CAAWI,QAAX,CAAoBmG,WAApB,GAHuB,CAKxB,CAED,C,CA/CD;;;;;;;;GAiDAlI,KAAK,CAACmF,SAAN,CAAkBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CAClBlE,OAAO,CAACjB,KAAR,CAAgBA,K;;;;;;;ACpDhB;AAAA;AAAA;AAAA;AAAA;GAMM24B,OAAM,CAAG,aAAc,GAAIhyB,8C,CAC3BiyB,IAAI,CAAG,aAAc,GAAIjyB,8C,CAE/B,KAAM4xB,aAAN,QAA2BM,8CAAK,CAE/BxoB,WAAW,CAAE3O,QAAF,CAAYK,QAAZ,CAAuB,CAEjC,MAAOL,QAAP,CAAiBK,QAAjB,CAFiC,CAIjC,KAAKuN,IAAL,CAAY,cAEZ,CAEDsL,oBAAoB,EAAG,CAEtB,GAAMlZ,SAAQ,CAAG,KAAKA,QAAtB,CAEA,IAAKA,QAAQ,CAACu1B,gBAAd,CA2BYv1B,QAAQ,CAACL,UA3BrB,EA6BCoR,OAAO,CAACC,KAAR,CAAe,gHAAf,CA7BD,KAEC;AAEA,GAAwB,IAAnB,GAAAhR,QAAQ,CAAC8Q,KAAd,CAA+B,CAK9B,OAHM0kB,kBAAiB,CAAGx1B,QAAQ,CAACY,UAAT,CAAoBoG,QAG9C,CAFMkH,aAAa,CAAG,EAEtB,CAAUvL,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGigB,iBAAiB,CAAC7qB,KAAvC,CAA8ChI,CAAC,CAAG4S,CAAlD,CAAqD5S,CAAC,EAAI,CAA1D,CAECs0B,MAAM,CAACvmB,mBAAP,CAA4B8kB,iBAA5B,CAA+C7yB,CAA/C,CAFD,CAGCu0B,IAAI,CAACxmB,mBAAL,CAA0B8kB,iBAA1B,CAA6C7yB,CAAC,CAAG,CAAjD,CAHD,CAKCuL,aAAa,CAAEvL,CAAF,CAAb,CAA6B,CAAN,EAAAA,CAAF,CAAc,CAAd,CAAkBuL,aAAa,CAAEvL,CAAC,CAAG,CAAN,CALrD,CAMCuL,aAAa,CAAEvL,CAAC,CAAG,CAAN,CAAb,CAAyBuL,aAAa,CAAEvL,CAAF,CAAb,CAAqBs0B,MAAM,CAACnsB,UAAP,CAAmBosB,IAAnB,CAN/C,CAUAl3B,QAAQ,CAAC0H,YAAT,CAAuB,cAAvB,CAAuC,GAAI+Q,6DAAJ,CAA4BvK,aAA5B,CAA2C,CAA3C,CAAvC,CAEA,CAjBD,IAmBC6C,QAAO,CAACqI,IAAR,CAAc,uGAAd,CAnBD,CA6BD,MAAO,KAEP,CAjD8B,CAqDhCyd,YAAY,CAACpzB,SAAb,CAAuB2zB,cAAvB,G;;;;;;;AC9DA;AAAA;AAAA;AAAA;GAYMH,OAAM,CAAG,aAAc,GAAIhyB,8C,CAC3BiyB,IAAI,CAAG,aAAc,GAAIjyB,8C,CACzBmvB,cAAc,CAAG,aAAc,GAAI9mB,8C,CACnC+mB,IAAI,CAAG,aAAc,GAAIC,0C,CACzBC,OAAO,CAAG,aAAc,GAAIthB,6C,CAC5BwhB,OAAO,CAAG,aAAc,GAAIxvB,8C,CAC5BoyB,OAAO,CAAG,aAAc,GAAIpyB,8C,CAC5ByvB,MAAM,CAAG,aAAc,GAAIzvB,8C,CAC3BqyB,MAAM,CAAG,aAAc,GAAIryB,8C,CAEjC,KAAMkyB,KAAN,QAAmB3pB,+CAAS,CAE3BmB,WAAW,EAAwE,IAAtE3O,SAAsE,wDAA3D,GAAIW,qDAAuD,CAArCN,QAAqC,wDAA1B,GAAIk3B,wDAAsB,CAElF,OAFkF,CAIlF,KAAK3pB,IAAL,CAAY,MAJsE,CAMlF,KAAK5N,QAAL,CAAgBA,QANkE,CAOlF,KAAKK,QAAL,CAAgBA,QAPkE,CASlF,KAAKu0B,kBAAL,EAEA,CAED1iB,IAAI,CAAEuF,MAAF,CAAW,CAOd,MALA,OAAMvF,IAAN,CAAYuF,MAAZ,CAKA,CAHA,KAAKpX,QAAL,CAAgBoX,MAAM,CAACpX,QAGvB,CAFA,KAAKL,QAAL,CAAgByX,MAAM,CAACzX,QAEvB,CAAO,IAEP,CAEDkZ,oBAAoB,EAAG,CAEtB,GAAMlZ,SAAQ,CAAG,KAAKA,QAAtB,CAEA,IAAKA,QAAQ,CAACu1B,gBAAd,CA2BYv1B,QAAQ,CAACL,UA3BrB,EA6BCoR,OAAO,CAACC,KAAR,CAAe,wGAAf,CA7BD,KAEC;AAEA,GAAwB,IAAnB,GAAAhR,QAAQ,CAAC8Q,KAAd,CAA+B,CAK9B,OAHM0kB,kBAAiB,CAAGx1B,QAAQ,CAACY,UAAT,CAAoBoG,QAG9C,CAFMkH,aAAa,CAAG,CAAE,CAAF,CAEtB,CAAUvL,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGigB,iBAAiB,CAAC7qB,KAAvC,CAA8ChI,CAAC,CAAG4S,CAAlD,CAAqD5S,CAAC,EAAtD,CAECs0B,MAAM,CAACvmB,mBAAP,CAA4B8kB,iBAA5B,CAA+C7yB,CAAC,CAAG,CAAnD,CAFD,CAGCu0B,IAAI,CAACxmB,mBAAL,CAA0B8kB,iBAA1B,CAA6C7yB,CAA7C,CAHD,CAKCuL,aAAa,CAAEvL,CAAF,CAAb,CAAqBuL,aAAa,CAAEvL,CAAC,CAAG,CAAN,CALnC,CAMCuL,aAAa,CAAEvL,CAAF,CAAb,EAAsBs0B,MAAM,CAACnsB,UAAP,CAAmBosB,IAAnB,CANvB,CAUAl3B,QAAQ,CAAC0H,YAAT,CAAuB,cAAvB,CAAuC,GAAI+Q,6DAAJ,CAA4BvK,aAA5B,CAA2C,CAA3C,CAAvC,CAEA,CAjBD,IAmBC6C,QAAO,CAACqI,IAAR,CAAc,+FAAd,CAnBD,CA6BD,MAAO,KAEP,CAEDyb,OAAO,CAAEC,SAAF,CAAaC,UAAb,CAA0B,IAE1B/0B,SAAQ,CAAG,KAAKA,QAFU,CAG1BoL,WAAW,CAAG,KAAKA,WAHO,CAI1B4pB,SAAS,CAAGF,SAAS,CAACxK,MAAV,CAAiB6M,IAAjB,CAAsBnC,SAJR,CAKxBC,SAAS,CAAGj1B,QAAQ,CAACi1B,SALG,CAMxBQ,aAAa,CAAGz1B,QAAQ,CAACqB,eAAT,CAAyB2F,QANjB,CAgBhC,GANiC,IAA5B,GAAAhH,QAAQ,CAACmO,cAMd,EANwCnO,QAAQ,CAACiG,qBAAT,EAMxC,CAJAsuB,OAAO,CAACriB,IAAR,CAAclS,QAAQ,CAACmO,cAAvB,CAIA,CAHAomB,OAAO,CAACppB,YAAR,CAAsBC,WAAtB,CAGA,CAFAmpB,OAAO,CAAChjB,MAAR,EAAkByjB,SAElB,CAAK,KAAAF,SAAS,CAACI,GAAV,CAAcC,gBAAd,CAAgCZ,OAAhC,CAAL,EAIAH,cAAc,CAACliB,IAAf,CAAqB9G,WAArB,EAAmCgqB,MAAnC,EAJA,CAKAf,IAAI,CAACniB,IAAL,CAAW4iB,SAAS,CAACI,GAArB,EAA2B/pB,YAA3B,CAAyCipB,cAAzC,CALA,IAOMiB,eAAc,CAAGL,SAAS,EAAK,CAAE,KAAK/kB,KAAL,CAAW1N,CAAX,CAAe,KAAK0N,KAAL,CAAWzN,CAA1B,CAA8B,KAAKyN,KAAL,CAAWhE,CAA3C,EAAiD,CAAtD,CAPhC,CAQMqpB,gBAAgB,CAAGD,cAAc,CAAGA,cAR1C,CAUMmC,MAAM,CAAG,GAAIvyB,8CAVnB,CAWMwyB,IAAI,CAAG,GAAIxyB,8CAXjB,CAYMyyB,YAAY,CAAG,GAAIzyB,8CAZzB,CAaM0yB,QAAQ,CAAG,GAAI1yB,8CAbrB,CAcM2yB,IAAI,CAAG,KAAKR,cAAL,CAAsB,CAAtB,CAA0B,CAdvC,CAgBA,GAAKp3B,QAAQ,CAACu1B,gBAAd,CAAiC,IAE1BzkB,MAAK,CAAG9Q,QAAQ,CAAC8Q,KAFS,CAG1BlQ,UAAU,CAAGZ,QAAQ,CAACY,UAHI,CAI1B40B,iBAAiB,CAAG50B,UAAU,CAACoG,QAJL,CAMhC,GAAe,IAAV,GAAA8J,KAAL,CAKC,OAHMK,MAAK,CAAGpE,IAAI,CAAC7K,GAAL,CAAU,CAAV,CAAa+yB,SAAS,CAAC9jB,KAAvB,CAGd,CAFMukB,GAAG,CAAG3oB,IAAI,CAAC3K,GAAL,CAAU0O,KAAK,CAACnG,KAAhB,CAAyBsqB,SAAS,CAAC9jB,KAAV,CAAkB8jB,SAAS,CAACtqB,KAArD,CAEZ,CAAUhI,CAAC,CAAGwO,KAAd,CAAkCxO,CAAC,CAAV+yB,GAAG,CAAG,CAA/B,CAAyC/yB,CAAC,EAAIi1B,IAA9C,CAAqD,IAE9C50B,EAAC,CAAG8N,KAAK,CAACM,IAAN,CAAYzO,CAAZ,CAF0C,CAGzCO,CAAC,CAAG4N,KAAK,CAACM,IAAN,CAAYzO,CAAC,CAAG,CAAhB,CAHqC,CAK/CgzB,iBAAiB,CAAE6B,MAAF,CAAUC,IAAV,CAAgB,IAAhB,CAAsBjC,iBAAtB,CAAyCC,aAAzC,CAAwDzyB,CAAxD,CAA2DE,CAA3D,CAL8B,CAOpD,GAAM20B,OAAM,CAAGxD,IAAI,CAACyD,mBAAL,CAA0BN,MAA1B,CAAkCC,IAAlC,CAAwCE,QAAxC,CAAkDD,YAAlD,CAAf,CAEA,KAAKG,MAAM,CAAGvC,gBAAd,GAEAqC,QAAQ,CAACxsB,YAAT,CAAuB,KAAKC,WAA5B,CAFA,CAE2C;AAE3C,GAAMZ,SAAQ,CAAGsqB,SAAS,CAACI,GAAV,CAAcgB,MAAd,CAAqBprB,UAArB,CAAiC6sB,QAAjC,CAAjB,CAEKntB,QAAQ,CAAGsqB,SAAS,CAACqB,IAArB,EAA6B3rB,QAAQ,CAAGsqB,SAAS,CAACsB,GANvD,EAQArB,UAAU,CAAC1xB,IAAX,CAAiB,CAEhBmH,QAAQ,CAAEA,QAFM,CAGhB;AACA;AACA8K,KAAK,CAAEoiB,YAAY,CAAC3xB,KAAb,GAAqBoF,YAArB,CAAmC,KAAKC,WAAxC,CALS,CAMhB0F,KAAK,CAAEnO,CANS,CAOhBuM,IAAI,CAAE,IAPU,CAQhB6oB,SAAS,CAAE,IARK,CAShBxe,MAAM,CAAE,IATQ,CAAjB,CARA,CAqBA,CAnCF,IA0CC,QAHMpI,QAAK,CAAGpE,IAAI,CAAC7K,GAAL,CAAU,CAAV,CAAa+yB,SAAS,CAAC9jB,KAAvB,CAGd,CAFMukB,KAAG,CAAG3oB,IAAI,CAAC3K,GAAL,CAAUozB,iBAAiB,CAAC7qB,KAA5B,CAAqCsqB,SAAS,CAAC9jB,KAAV,CAAkB8jB,SAAS,CAACtqB,KAAjE,CAEZ,CAAUhI,EAAC,CAAGwO,OAAd,CAAkCxO,EAAC,CAAV+yB,KAAG,CAAG,CAA/B,CAAyC/yB,EAAC,EAAIi1B,IAA9C,CAAqD,CAE/CjC,iBAAiB,CAAE6B,MAAF,CAAUC,IAAV,CAAgB,IAAhB,CAAsBjC,iBAAtB,CAAyCC,aAAzC,CAAwD9yB,EAAxD,CAA2DA,EAAC,CAAC,CAA7D,CAF8B,CAIpD,GAAMk1B,QAAM,CAAGxD,IAAI,CAACyD,mBAAL,CAA0BN,MAA1B,CAAkCC,IAAlC,CAAwCE,QAAxC,CAAkDD,YAAlD,CAAf,CAEA,KAAKG,OAAM,CAAGvC,gBAAd,GAEAqC,QAAQ,CAACxsB,YAAT,CAAuB,KAAKC,WAA5B,CAFA,CAE2C;AAE3C,GAAMZ,UAAQ,CAAGsqB,SAAS,CAACI,GAAV,CAAcgB,MAAd,CAAqBprB,UAArB,CAAiC6sB,QAAjC,CAAjB,CAEKntB,SAAQ,CAAGsqB,SAAS,CAACqB,IAArB,EAA6B3rB,SAAQ,CAAGsqB,SAAS,CAACsB,GANvD,EAQArB,UAAU,CAAC1xB,IAAX,CAAiB,CAEhBmH,QAAQ,CAAEA,SAFM,CAGhB;AACA;AACA8K,KAAK,CAAEoiB,YAAY,CAAC3xB,KAAb,GAAqBoF,YAArB,CAAmC,KAAKC,WAAxC,CALS,CAMhB0F,KAAK,CAAEnO,EANS,CAOhBuM,IAAI,CAAE,IAPU,CAQhB6oB,SAAS,CAAE,IARK,CAShBxe,MAAM,CAAE,IATQ,CAAjB,CARA,CAqBA,CAIF,CA/ED,IA+EYvZ,SAAQ,CAACL,UA/ErB,EAiFCoR,OAAO,CAACC,KAAR,CAAe,2FAAf,CAjGD,CAEA;AAmGA,CAED4jB,kBAAkB,EAAG,CAEpB,GAAM50B,SAAQ,CAAG,KAAKA,QAAtB,CAEA,GAAKA,QAAQ,CAACu1B,gBAAd,CAAiC,IAE1Bl0B,gBAAe,CAAGrB,QAAQ,CAACqB,eAFD,CAG1Bub,IAAI,CAAGlZ,MAAM,CAACkZ,IAAP,CAAavb,eAAb,CAHmB,CAKhC,GAAmB,CAAd,CAAAub,IAAI,CAAC/Z,MAAV,CAAuB,CAEtB,GAAMkE,eAAc,CAAG1F,eAAe,CAAEub,IAAI,CAAE,CAAF,CAAN,CAAtC,CAEA,GAAK7V,cAAc,SAAnB,CAAoC,CAEnC,KAAKuB,qBAAL,CAA6B,EAFM,CAGnC,KAAKutB,qBAAL,CAA6B,EAHM,CAKnC,IAAM,GAECvvB,KAFD,CAAIoX,CAAC,CAAG,CAAR,CAAWC,EAAE,CAAG5W,cAAc,CAAClE,MAArC,CAA6C6a,CAAC,CAAGC,EAAjD,CAAqDD,CAAC,EAAtD,CAEOpX,IAFP,CAEcS,cAAc,CAAE2W,CAAF,CAAd,CAAoBpX,IAApB,EAAoCoX,CAApC,GAFd,CAIC,KAAKpV,qBAAL,CAA2BjF,IAA3B,CAAiC,CAAjC,CAJD,CAKC,KAAKwyB,qBAAL,CAA4BvvB,IAA5B,EAAqCoX,CAItC,CAED,CAED,CA3BD,IA2BO,CAEN,GAAMnd,aAAY,CAAGP,QAAQ,CAACO,YAA9B,CAEKA,YAAY,SAAZ,EAAoD,CAAtB,CAAAA,YAAY,CAACsC,MAJ1C,EAMLkO,OAAO,CAACC,KAAR,CAAe,oGAAf,CAID,CAED,CArO0B,CAyO5B,QAAS2kB,kBAAT,CAA4B6B,MAA5B,CAAoCC,IAApC,CAA0Cle,MAA1C,CAAkDvS,QAAlD,CAA4DyuB,aAA5D,CAA2EzyB,CAA3E,CAA8EE,CAA9E,CAAkF,CAEhFs0B,MAAM,CAAC9mB,mBAAP,CAA4B1J,QAA5B,CAAsChE,CAAtC,CAFgF,CAGhFy0B,IAAI,CAAC/mB,mBAAL,CAA0B1J,QAA1B,CAAoC9D,CAApC,CAHgF,CAKhF,GAAIozB,gBAAe,CAAG/c,MAAM,CAACjR,qBAA7B,CAEA,GAAKiR,MAAM,CAAClZ,QAAP,CAAgBE,YAAhB,EAAgCk1B,aAAhC,EAAiDa,eAAtD,CAAwE,CAEtE7B,OAAO,CAACjpB,GAAR,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAFsE,CAGtE6rB,OAAO,CAAC7rB,GAAR,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAHsE,CAKtE,IAAM,GAAI7I,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAGwmB,aAAa,CAAC5yB,MAApC,CAA4CF,CAAC,CAAGsM,EAAhD,CAAoDtM,CAAC,EAArD,CAA2D,IAErD4zB,UAAS,CAAGD,eAAe,CAAE3zB,CAAF,CAF0B,CAGrDoE,cAAc,CAAG0uB,aAAa,CAAE9yB,CAAF,CAHuB,CAKtC,CAAd,GAAA4zB,SALoD,GAOzD7B,MAAM,CAAChkB,mBAAP,CAA4B3J,cAA5B,CAA4C/D,CAA5C,CAPyD,CAQzDs0B,MAAM,CAAC5mB,mBAAP,CAA4B3J,cAA5B,CAA4C7D,CAA5C,CARyD,CAUzDuxB,OAAO,CAAC+B,eAAR,CAAyB9B,MAAM,CAAC+B,GAAP,CAAYe,MAAZ,CAAzB,CAA+CjB,SAA/C,CAVyD,CAWzDc,OAAO,CAACb,eAAR,CAAyBc,MAAM,CAACb,GAAP,CAAYgB,IAAZ,CAAzB,CAA6ClB,SAA7C,CAXyD,CAa1D,CAEDiB,MAAM,CAAC/wB,GAAP,CAAYguB,OAAZ,CApBsE,CAqBtEgD,IAAI,CAAChxB,GAAL,CAAU4wB,OAAV,CAED,CAEF,CAEDF,IAAI,CAAC1zB,SAAL,CAAegW,MAAf,G;;;;;;ijBCjSMpa,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAUfW,YAAY,CAAG,UAAY,CAK/B;;;;;KAL+B,CAiD/B;;;;;;;;;;;;;KAhDCX,mBAAO,CAAC,EAAD,CAAP,CAAqB+gB,OAAtB,CAA+Blf,IAA/B,CAAoC,IAApC,CAD+B,CAE/B,KAAKu4B,cAAL,GAF+B,CAW/B,KAAKC,cAAL,oDAAsB,UAAgBC,SAAhB,CAA2B,IAC3CpM,EAAC,CAAG,CADuC,CAE3CqM,CAAC,CAAG,CAFuC,CAG3CpM,CAAC,CAAG,CAHuC,CAI/C,GAAImM,SAAS,EAAIA,SAAS,CAACr1B,MAA3B,CAAmC,CACjC,KAAKu1B,SAAL,GADiC,CAEjC,GAAMxZ,MAAK,CAAG,GAAIJ,MAAlB,CACAI,KAAK,CAACkG,WAAN,CAAoB,WAHa,CAOjC,OACQhO,KADR,CAHMuhB,MAAM,CAAGxE,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAGf,CAFIjxB,MAAM,CAAG,CAEb,CADMy1B,UAAU,CAAOjmB,KAAP,CAAa6lB,SAAS,CAACr1B,MAAvB,CAChB,CAASF,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGu1B,SAAS,CAACr1B,MAA9B,CAAsCF,CAAC,EAAvC,CACQmU,IADR,MACqB,MAAKyhB,iBAAL,CAAuB3Z,KAAvB,CAA8BsZ,SAAS,CAACv1B,CAAD,CAAvC,CAA4C01B,MAA5C,CADrB,CAEMvhB,IAAI,EAAIA,IAAI,CAACjM,KAFnB,GAGIihB,CAAC,CAAGhV,IAAI,CAACigB,KAHb,CAIIoB,CAAC,CAAGrhB,IAAI,CAAC0hB,MAJb,CAKIF,UAAU,CAACvM,CAAD,CAAV,CAAgBjV,IAAI,CAACjM,KALzB,CAMIhI,MAAM,EAAIy1B,UAAU,CAACvM,CAAD,CAAV,CAAclpB,MAN5B,CAOIkpB,CAAC,EAPL,EAUA,GAAM0M,UAAS,CAAG,GAAIza,WAAJ,CAAenb,MAAf,CAAlB,CACAA,MAAM,CAAG,CAlBwB,CAmBjCy1B,UAAU,CAACI,OAAX,CAAmB5hB,IAAI,EAAI,CACzB2hB,SAAS,CAACjtB,GAAV,CAAcsL,IAAd,CAAoBjU,MAApB,CADyB,CAEzBA,MAAM,EAAIiU,IAAI,CAACjU,MAChB,CAHD,CAnBiC,CAwBjC,KAAK81B,IAAL,CAAY,GAAIt5B,MAAK,CAACu5B,kBAAV,CAA6BH,SAA7B,CAAwC3M,CAAxC,CAA2CqM,CAA3C,CAA8CpM,CAA9C,CAxBqB,CAyBjC,KAAKlN,IAAL,CAAY,CACVkY,KAAK,CAAEjL,CADG,CAEV0M,MAAM,CAAEL,CAFE,CAGVU,KAAK,CAAE9M,CAHG,CAzBqB,CA8BjC,KAAKqM,SAAL,GACD,CACF,CApCD,yDAX+B,CA+D/B,KAAKU,WAAL,CAAmB,SAAU/4B,OAAV,CAAmB,CACpC,GAAI,KAAK44B,IAAT,CAAe,CACb,GAAIt4B,SAAJ,CACA,IAAIN,OAAJ,CAoBEM,QAAQ,CAAG,GAAIhB,MAAK,CAACqC,iBAAV,CAA4B,CACrCb,KAAK,CAAE,GAAIxB,MAAK,CAACsC,KAAV,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAD8B,CAErCX,WAAW,GAF0B,CAGrCZ,OAAO,CAAE,CAH4B,CAIrCwB,GAAG,CAAE,KAAK+2B,IAJ2B,CAKrC13B,IAAI,CAAE5B,KAAK,CAAC6B,UALyB,CAA5B,CApBb,KACE,IAAInB,OAAO,CAACg5B,EAAR,EAAch5B,OAAO,CAACi5B,EAA1B,CAA8B,CAC5B,GAAIh4B,YAAW,GAAf,CACIjB,OAAO,CAACiB,WAFgB,GAG1BA,WAAW,CAAGjB,OAAO,CAACiB,WAHI,EAI5B,GAAIC,KAAI,CAAG5B,KAAK,CAAC+G,SAAjB,CACIrG,OAAO,CAACkB,IALgB,GAM1BA,IAAI,CAAGlB,OAAO,CAACkB,IANW,EAO5BZ,QAAQ,CAAG,GAAIhB,MAAK,CAAC45B,cAAV,CAAyB,CAClCj4B,WADkC,CAElCk4B,QAAQ,CAAEn5B,OAAO,CAACm5B,QAFgB,CAGlCpZ,YAAY,CAAE/f,OAAO,CAACg5B,EAHY,CAIlCI,cAAc,CAAEp5B,OAAO,CAACi5B,EAJU,CAKlC/3B,IALkC,CAAzB,CAPiB,CAcxBlB,OAAO,CAACq5B,WAdgB,GAe1B/4B,QAAQ,CAAC+4B,WAAT,CAAuBr5B,OAAO,CAACq5B,WAfL,CAiB7B,CAUH,GAAI/4B,QAAJ,CAEE,MADAA,SAAQ,CAACmG,WAAT,GACA,CAAOnG,QAEV,CACF,CACF,C,CA5GD;;;;;;;GA8GA9B,YAAY,CAACkF,SAAb,CAAyBC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,EAAD,CAAP,CAAqB+gB,OAAtB,CAA+Blb,SAA7C,C,CACzBlE,OAAO,CAAChB,YAAR,CAAuBA,Y;;;;;;ijBCjHjBc,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAUf+gB,OAAO,CAAG,UAAY,CAC1B,KAAK0a,SAAL,GAD0B,CAE1B,KAAKV,IAAL,OAF0B,CAG1B,KAAKP,SAAL,GAH0B,CAI1B,KAAKvZ,IAAL,CAAY,CACVkY,KAAK,CAAE,CADG,CAEVyB,MAAM,CAAE,CAFE,CAGVK,KAAK,CAAE,CAHG,CAKb,C,CAjBD;;;;;;;IAmBA;;;;;;;;IAiBA;;;;;;KAOA;;;;;;;;;IA2BA;;;;IAWA;;;;GArDAla,OAAO,CAAClb,SAAR,CAAkB61B,SAAlB,CAA8B,SAAUC,GAAV,CAAe9a,GAAf,CAAoB,CAChD,MAAO,IAAI+a,QAAJ,CAAY,CAACC,OAAD,CAAUC,MAAV,GAAqB,CACtCH,GAAG,CAACI,MAAJ,CAAa,IAAMF,OAAO,CAACF,GAAD,CADY,CAEtCA,GAAG,CAACK,OAAJ,CAAcF,MAFwB,CAGtCH,GAAG,CAAC9a,GAAJ,CAAUA,GACX,CAJM,CAKR,C,CAmBDE,OAAO,CAAClb,SAAR,CAAkB80B,iBAAlB,oDAAsC,UAAgBgB,GAAhB,CAAqB9a,GAArB,CAA0B4Z,MAA1B,CAAkC,MAChE,MAAKiB,SAAL,CAAeC,GAAf,CAAoB9a,GAApB,CADgE,CAEtE4Z,MAAM,CAACtB,KAAP,CAAewC,GAAG,CAACxC,KAFmD,CAGtEsB,MAAM,CAACG,MAAP,CAAgBe,GAAG,CAACf,MAHkD,CAItE,GAAMqB,IAAG,CAAGxB,MAAM,CAACyB,UAAP,CAAkB,IAAlB,CAAZ,CAEA,MADAD,IAAG,CAACE,SAAJ,CAAcR,GAAd,CAAmB,CAAnB,CAAsB,CAAtB,CACA,CAAO,CACL1uB,KAAK,CAAE,GAAImT,WAAJ,CAAe6b,GAAG,CAACG,YAAJ,CAAiB,CAAjB,CAAoB,CAApB,CAAuB3B,MAAM,CAACtB,KAA9B,CAAqCsB,MAAM,CAACG,MAA5C,EAAoD1hB,IAApD,CAAyD6B,MAAxE,CADF,CAELoe,KAAK,CAAEsB,MAAM,CAACtB,KAFT,CAGLyB,MAAM,CAAEH,MAAM,CAACG,MAHV,CAKR,CAXD,yD,CAaA7Z,OAAO,CAAClb,SAAR,CAAkBw0B,cAAlB,qDAAmC,WAA2B,CAE7D,CAFD,0D,CASAtZ,OAAO,CAAClb,SAAR,CAAkBw2B,OAAlB,CAA4B,UAAY,SAClC,MAAKtB,IAAL,EAAc,KAAKP,SADe,CAIvC,C,CAODzZ,OAAO,CAAClb,SAAR,CAAkBq1B,WAAlB,CAAgC,UAAY,CAC1C,GAAI,KAAKH,IAAT,CACE,MAAO,IAAIt5B,MAAK,CAACqC,iBAAV,CAA4B,CACjCb,KAAK,CAAE,GAAIxB,MAAK,CAACsC,KAAV,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAD0B,CAEjCX,WAAW,GAFsB,CAGjCZ,OAAO,CAAE,CAHwB,CAIjCwB,GAAG,CAAE,KAAK+2B,IAJuB,CAKjC13B,IAAI,CAAE5B,KAAK,CAAC6B,UALqB,CAA5B,CAQV,C,CAED3B,OAAO,CAACof,OAAR,CAAkBA,O;;;;;;GCpGZtf,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfiiB,MAAM,CAAGjiB,mBAAO,CAAC,EAAD,C,CAYhBY,aAAa,CAAG,SAAU07B,SAAV,CAAqB,CAIzC;;;;;;KAJyC,CAWzC;;;;;KAXyC,CA0DzC;;;;KA1DyC,CAoEzC;;;;KApEyC,CAuFzC;;KAvFyC,CAqGzC;;;;;;KApGCt8B,mBAAO,CAAC,EAAD,CAAP,CAA8Bu8B,gBAA/B,CAAiD16B,IAAjD,CAAsD,IAAtD,CAA4Dy6B,SAA5D,CADyC,CAEzC,KAAKE,eAAL,GAFyC,CAiBzC,KAAKC,YAAL,CAAoBC,aAAa,EAAI,CAC9B,KAAKr6B,KADyB,GAClB,KAAKA,KAAL,CAAa,GAAIZ,MAAK,CAAC4f,KADL,EAE/B,KAAKP,OAAL,EAAgB,KAAKA,OAAL,CAAasZ,cAA7B,EAA+C,KAAKtZ,OAAL,CAAaub,OAAb,EAFhB,GAGjCK,aAAa,CAAC5B,OAAd,CAAsB6B,KAAK,EAAI,CAC7B,GAAIA,KAAK,CAACC,SAAN,EAAmBD,KAAK,CAACtkB,KAA7B,CAAoC,CAClC,GAAMjW,SAAQ,CAAG,GAAIX,MAAK,CAACo7B,aAAV,CAAyB,CAAzB,CAA4B,CAA5B,CAAjB,CACAz6B,QAAQ,CAAC+P,SAAT,CAAmB,EAAnB,CAAwB,EAAxB,CAA6B,CAA7B,CAFkC,CAGlC,GAAMmpB,SAAQ,CAAGrZ,MAAM,CAAC6a,WAAP,EAAjB,CAGA,OAFAxB,QAAQ,CAACyB,OAAT,CAAiB1kB,KAAjB,CAAyB,KAAKyI,OAAL,CAAaia,IAEtC,CADAO,QAAQ,CAACL,KAAT,CAAe5iB,KAAf,CAAuB,KAAKyI,OAAL,CAAaG,IAAb,CAAkBga,KACzC,CAAO0B,KAAK,CAACC,SAAb,EACE,IAAK,GAAL,CACEtB,QAAQ,CAACqB,KAAT,CAAetkB,KAAf,CAAqBzK,GAArB,CAAyB+uB,KAAK,CAACtkB,KAA/B,CAAsC,CAAtC,CAAyC,CAAzC,CADF,CAEE,MACF,IAAK,GAAL,CACEijB,QAAQ,CAACqB,KAAT,CAAetkB,KAAf,CAAqBzK,GAArB,CAAyB,CAAzB,CAA4B+uB,KAAK,CAACtkB,KAAlC,CAAyC,CAAzC,CADF,CAEE,MACF,IAAK,GAAL,CACEijB,QAAQ,CAACqB,KAAT,CAAetkB,KAAf,CAAqBzK,GAArB,CAAyB,CAAzB,CAA4B,CAA5B,CAA+B+uB,KAAK,CAACtkB,KAArC,CADF,CAEE,MACF,QAVF,CANkC,GAmB5BlW,QAAO,CAAG,CACdi5B,EAAE,CAAEnZ,MAAM,CAACmZ,EADG,CAEdD,EAAE,CAAElZ,MAAM,CAACkZ,EAFG,CAGdG,QAAQ,CAAEA,QAHI,CAIdE,WAAW,CAAEvZ,MAAM,CAACuZ,WAJN,CAKdn4B,IAAI,CAAE5B,KAAK,CAAC6B,UALE,CAMdF,WAAW,GANG,CAnBkB,CA2B5BX,QAAQ,CAAG,KAAKqe,OAAL,CAAaoa,WAAb,CAAyB/4B,OAAzB,CA3BiB,CA4BlCM,QAAQ,CAACmG,WAAT,GA5BkC,CA6BlC,GAAM3E,KAAI,CAAG,GAAIxC,MAAK,CAACyC,IAAV,CAAgB9B,QAAhB,CAA0BK,QAA1B,CAAb,CACA,KAAKJ,KAAL,CAAWwG,GAAX,CAAe5E,IAAf,CACD,CACF,CAjCD,CAHiC,CAqCjC,KAAKgD,yBAAL,GArCiC,CAuCpC,CAxDwC,CA+DzC,KAAK+1B,SAAL,CAAiB,IACX,KAAK36B,KADM,CACQ,CAAC,GAAG,KAAKA,KAAL,CAAW46B,QAAf,CADR,CAER,EAjEgC,CAyEzC,KAAKC,WAAL,CAAmBP,KAAK,EAAI,CACtBA,KAAK,EAAI,KAAKt6B,KADQ,EAEpB,KAAKA,KAAL,CAAW86B,aAAX,CAAyBR,KAAK,CAACzkB,EAA/B,CAFoB,GAGtB,KAAK7V,KAAL,CAAW0G,MAAX,CAAkB4zB,KAAlB,CAHsB,CAItBA,KAAK,CAACS,QAAN,EAJsB,CAKlBT,KAAK,CAACv6B,QALY,EAMpBu6B,KAAK,CAACv6B,QAAN,CAAekK,OAAf,EANoB,CAOlBqwB,KAAK,CAACl6B,QAPY,EAQpBk6B,KAAK,CAACl6B,QAAN,CAAe6J,OAAf,EARoB,CAStB,KAAKrF,yBAAL,GATsB,CAY3B,CArFwC,CA0FzC,KAAKqF,OAAL,CAAe,IAAM,CACnB,KAAKjK,KAAL,CAAW46B,QAAX,CAAoBnC,OAApB,CAA4B6B,KAAK,EAAG,CAC9BA,KAAK,CAACv6B,QADwB,EAEhCu6B,KAAK,CAACv6B,QAAN,CAAekK,OAAf,EAFgC,CAG9BqwB,KAAK,CAACl6B,QAHwB,EAIhCk6B,KAAK,CAACl6B,QAAN,CAAe6J,OAAf,EACH,CALD,CADmB,CAOlBtM,mBAAO,CAAC,EAAD,CAAP,CAA8Bu8B,gBAA/B,CAAiD12B,SAAjD,CAA2DyG,OAA3D,CAAmEzK,IAAnE,CAAwE,IAAxE,CAPmB,CAQnB,KAAKoF,yBAAL,GACD,CAnGwC,CA4GzC,KAAKwG,cAAL,CAAsB,UAAW,CAW/B,MAVI,MAAKpL,KAAL,EAAc,KAAKA,KAAL,CAAW46B,QAAzB,EAAqC,KAAK56B,KAAL,CAAWgJ,OAAhD,EACF,KAAKpE,yBASP,GARE,KAAK5E,KAAL,CAAW46B,QAAX,CAAoBnC,OAApB,CAA4B6B,KAAK,EAAG,CAClC,GAAMtkB,MAAK,CAAGskB,KAAK,CAACl6B,QAAN,CAAe64B,QAAf,CAAwBqB,KAAxB,CAA8BtkB,KAA5C,CACA,KAAKnR,iBAAL,CAAuBm2B,aAAvB,CAAqChlB,KAArC,CACD,CAHD,CAQF,CAJE,KAAKhW,KAAL,CAAWwL,iBAAX,EAIF,CAHE,KAAK3G,iBAAL,CAAuBqG,YAAvB,CAAoC,KAAKlL,KAAL,CAAWmL,WAA/C,CAGF,CAFE,KAAKvG,yBAAL,GAEF,EAAO,KAAKC,iBACb,CACF,C,CAGDtG,aAAa,CAACiF,SAAd,CAA0BC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,EAAD,CAAP,CAA8Bu8B,gBAA/B,CAAiD12B,SAA/D,C,CAC1BlE,OAAO,CAACf,aAAR,CAAwBA,a;;;;;;GC1IlBa,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAEfw7B,WAAW,CAAG/5B,KAAK,CAAC67B,K,CAEpBlC,EAAE,6R,CAqBFD,EAAE,if,CAwBF2B,WAAW,CAAG,UAAW,CAC7B,MAAO,CACLC,OAAO,CAAE,CAAE1kB,KAAK,OAAP,CADJ,CAEL4iB,KAAK,CAAE,CAAE5iB,KAAK,CAAE,CAAT,CAFF,CAGLskB,KAAK,CAAE,CAAEtkB,KAAK,CAAE,GAAI5W,MAAK,CAAC4F,OAAV,CAAmB,CAAnB,CAAsB,CAAtB,CAAyB,CAAzB,CAAT,CAHF,CAKR,C,CAED1F,OAAO,CAACy5B,EAAR,CAAaA,E,CACbz5B,OAAO,CAACw5B,EAAR,CAAaA,E,CACbx5B,OAAO,CAAC65B,WAAR,CAAsBA,W,CACtB75B,OAAO,CAACm7B,WAAR,CAAsBA,W;;;;;;GC5DhBr7B,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CASfu8B,gBAAgB,CAAG,SAAUD,SAAV,CAAqB,CAC3Ct8B,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCC,IAArC,CAA0C,IAA1C,CAD4C,CAE5C,KAAK07B,kBAAL,GAF4C,CAG5C,KAAKzc,OAAL,CAAewb,SAChB,C,CAXD;;;;;;GAaAC,gBAAgB,CAAC12B,SAAjB,CAA6BC,MAAM,CAACC,MAAP,CAAe/F,mBAAO,CAAC,CAAD,CAAP,CAAwB4B,UAAzB,CAAqCiE,SAAnD,C,CAC7BlE,OAAO,CAAC46B,gBAAR,CAA2BA,gB;;;;;;GChBrB96B,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfw9B,YAAY,CAAGx9B,mBAAO,CAAC,EAAD,C,CAC5B;;;;;;;;;;;GAYA2B,OAAO,CAACd,QAAR,CAAmB,SAAU48B,WAAV,CAAuB,IAErCC,UAAS,CAAGD,WAFyB,CAMrCE,QAAQ,OAN6B,CAOrCC,YAAY,OAPyB,CAUnCC,KAAK,CAAG,GAAIp8B,MAAK,CAACq8B,KAAV,IAV2B,CAWzC,KAAK/vB,aAAL,GAXyC,CAYxC;wDAZwC,GAcrCgwB,SAAQ,CAAG,GAd0B,CAerCC,0BAA0B,CAAG,EAfQ,CAgBpCC,6BAA6B,CAAG,CAhBI,CAiBpCC,2BAA2B,CAAG,EAjBM,CAkBrCC,8BAA8B,CAAI,CAlBG,CAmBrCC,WAAW,OAnB0B,CAoBrCC,WAAW,OApB0B,CAoBZC,UAAU,OApBE,CAoBYC,UAAU,OApBtB,CAqBrCC,QAAQ,CAAG,EArB0B,CAsBrCC,sBAAsB,CAAG,EAtBY,CAuBrCC,WAAW,CAAG,GAAIj9B,MAAK,CAAC4f,KAvBa,CAwBrCoZ,MAAM,OAxB+B,CAyBpCkE,MAAM,OAzB8B,CA0BpCC,WAAW,GA1ByB,CA2BnCzJ,KAAK,CAAG,IA3B2B,CA4BnC0J,WAAW,CAAG,CAAC,CAAD,CAAI,CAAJ,CA5BqB,CA6BnCC,aAAa,CAAG,CAAC,CAAD,CAAI,CAAJ,CA7BmB,CA+BzC,KAAKC,eAAL,CAAuB,IAAM,CAC5B,GAAIrB,SAAJ,CACC,MAAOA,UAAS,CAACsB,WAAjB,CAF2B,MAGjBvE,OAHiB,CAIO,WAA9B,QAAOA,OAAM,CAACuE,WAJS,CAOnB7vB,IAAI,CAAC+H,KAAL,CAAWujB,MAAM,CAACtB,KAAlB,CAPmB,CAKnBhqB,IAAI,CAAC+H,KAAL,CAAWujB,MAAM,CAACuE,WAAlB,CALmB,CAQrB,CACP,CAxCwC,CA0CzC,KAAKC,gBAAL,CAAwB,IAAM,CAC7B,GAAIvB,SAAJ,CACC,MAAOA,UAAS,CAACwB,YAAjB,CAF4B,MAGlBzE,OAHkB,CAIO,WAA/B,QAAOA,OAAM,CAACyE,YAJU,CAOpB/vB,IAAI,CAAC+H,KAAL,CAAWujB,MAAM,CAACG,MAAlB,CAPoB,CAKpBzrB,IAAI,CAAC+H,KAAL,CAAWujB,MAAM,CAACyE,YAAlB,CALoB,CAQtB,CACP,CAnDwC,CAwDzC,KAAKC,cAAL,CAAsB,IAAM,CAC3BvB,YAAY,CAACuB,cAAb,EAD2B,IAErBhG,MAAK,CAAG,KAAK4F,eAAL,EAFa,CAGrBnE,MAAM,CAAG,KAAKqE,gBAAL,EAHY,CAI3B,GAAItB,QAAQ,MAAZ,CAA2B,CAC1B,GAAIyB,UAAJ,CACI1B,SAFsB,EAGzB0B,SAAS,CAAG1B,SAAS,CAAC2B,qBAAV,EAHa,CAIzB1B,QAAQ,CAACrH,OAAT,CAAiB6C,KAAjB,CAAwByB,MAAxB,CAJyB,EAKfH,MALe,GAMmB,WAAxC,QAAOA,OAAM,CAAC4E,qBANO,CAYxB1B,QAAQ,CAACrH,OAAT,CAAiB6C,KAAjB,CAAwByB,MAAxB,IAZwB,EAOxBwE,SAAS,CAAG3E,MAAM,CAAC4E,qBAAP,EAPY,CAQxB5E,MAAM,CAACtB,KAAP,CAAeA,KARS,CASxBsB,MAAM,CAACG,MAAP,CAAgBA,MATQ,CAUxB+C,QAAQ,CAACrH,OAAT,CAAiB6C,KAAjB,CAAwByB,MAAxB,IAVwB,GAgBtBwE,SAhBsB,GAiBzBN,aAAa,CAAC,CAAD,CAAb,CAAmBM,SAAS,CAACE,IAjBJ,CAkBzBR,aAAa,CAAC,CAAD,CAAb,CAAmBM,SAAS,CAACG,GAlBJ,EAoB1B,GAAMC,OAAM,CAAG,GAAI/9B,MAAK,CAACiD,OAAzB,CACAi5B,QAAQ,CAAC8B,OAAT,CAAiBD,MAAjB,CArB0B,CAsB1BX,WAAW,CAAC,CAAD,CAAX,CAAiBW,MAAM,CAAC76B,CAtBE,CAuB1Bk6B,WAAW,CAAC,CAAD,CAAX,CAAiBW,MAAM,CAAC56B,CACxB,CACD,CArFwC,CA0FzC,KAAK86B,uBAAL,CAA+BpmB,UAAU,EAAI,CAE3C,GADAA,UAAU,CAAGA,UAAU,EAAI,EAC3B,CAAI,SAAAA,UAAU,UAAd,CAA2C,CACxC,GAAIqmB,SAAQ,GAAZ,CACA,GAAI,CACE,iEAAiE9iB,IAAjE,CAAsE+iB,SAAS,CAACC,SAAhF,CADF,GAEAF,QAAQ,GAFR,CAIH,CACD,MAAMG,GAAN,CAAW,CACTH,QAAQ,GACT,CAECrmB,UAAU,UAX4B,EAUpCqmB,QAIN,CACGrmB,UAAU,OAjB6B,GAkB1CokB,SAAS,OAlBiC,CAmB1CjD,MAAM,CAAGnhB,UAAU,OAnBuB,EAqB1CqkB,QAAQ,CAAG,GAAIl8B,MAAK,CAACs+B,aAAV,CAAwBzmB,UAAxB,CArB+B,CAsBtC,SAAAokB,SAtBsC,EAuB1CA,SAAS,CAACsC,WAAV,CAAuBrC,QAAQ,CAACsC,UAAhC,CAvB0C,CAyB3CtC,QAAQ,CAACuC,aAAT,CAAwB,QAAxB,CAAkC,CAAlC,CAzB2C,CA0BvCzF,MAAM,EAAIA,MAAM,CAAC0F,KA1BsB,GA2B1C1F,MAAM,CAAC0F,KAAP,CAAavF,MAAb,CAAsB,MA3BoB,CA4B1CH,MAAM,CAAC0F,KAAP,CAAahH,KAAb,CAAqB,MA5BqB,EA8B1CwE,QAAQ,CAACyC,SAAT,GA9B0C,CA+B3C,GAAMpxB,MAAK,CAAG,KAAKqxB,WAAL,CAAiB,SAAjB,CAAd,CACA,KAAKC,eAAL,CAAqBtxB,KAArB,CACD,CA3HwC,CAiIzC,KAAKuxB,eAAL,CAAuB,IACf3C,YAlIiC,CA2IzC,KAAK0C,eAAL,CAAuBE,OAAO,EAAI,CACjC,GAAIA,OAAJ,CAAa,CACZ,KAAKC,iBAAL,CAAuBD,OAAvB,CADY,CAEZ,GAAME,SAAQ,CAAG9C,YAAjB,CACAA,YAAY,CAAG4C,OAHH,CAIRE,QAJQ,EAKXA,QAAQ,CAACC,2BAAT,IALW,CAOZ/C,YAAY,CAAC+C,2BAAb,IAPY,CAQZ/C,YAAY,CAACgD,wBAAb,CAAsClC,WAAtC,CARY,CASZ,KAAKS,cAAL,EACA,CACD,CAvJwC,CA+JzC,KAAK0B,cAAL,CAAsBn4B,IAAI,EAClB81B,QAAQ,CAAC91B,IAAD,CAhKyB,CA0KzC,KAAK23B,WAAL,CAAmB33B,IAAI,EAAI,CAC1B,GAAI,MAAA81B,QAAQ,CAAC91B,IAAD,CAAZ,EAGC,GAAIo4B,UAAJ,CAOA,MALCA,UAKD,CANIrG,MAMJ,CALa,IAAKz6B,mBAAO,CAAC,EAAD,CAAP,CAAmBc,KAAxB,EAA+B25B,MAA/B,CAAuCkD,QAAvC,CAKb,CAHa,IAAK39B,mBAAO,CAAC,EAAD,CAAP,CAAmBc,KAAxB,EAA+B48B,SAA/B,CAA0CC,QAA1C,CAGb,CAFAa,QAAQ,CAAC91B,IAAD,CAAR,CAAiBo4B,SAEjB,CADAA,SAAS,CAACC,SAAV,CAAsBr4B,IACtB,CAAOo4B,SAVR,CAYA,CAvLwC,CAqNzC,KAAKE,SAAL,CAAiB,IAAM,CACtBpD,YAAY,CAACoD,SAAb,EACA,CAvNwC,CA6NzC,KAAKC,OAAL,CAAe,IAAM,CACpB,GAAIrD,YAAJ,CAAkB,CACjB,GAAMr5B,YAAW,CAAGq5B,YAAY,CAACnwB,cAAb,EAApB,CACA,GAAIlJ,WAAJ,CAAiB,CACb,IAAIQ,CAAC,CAAG,CAAR,CAAWA,CAAC,CAAG05B,sBAAsB,CAACx5B,MAAtC,CAA8CF,CAAC,EAA/C,CAAmD,CAC/C,GAAMm8B,aAAY,CAAGzC,sBAAsB,CAAC15B,CAAD,CAAtB,CAA0B0I,cAA1B,EAArB,CACIyzB,YAF2C,EAG9C38B,WAAW,CAAConB,KAAZ,CAAkBuV,YAAlB,CAEJ,CACJtD,YAAY,CAACuD,sBAAb,CAAoC58B,WAApC,CACA,CACD,CACD,CA1OwC,CAmPzC,KAAK68B,aAAL,CAAqB,CAAC5jB,IAAD,CAAO6jB,OAAP,CAAgBC,SAAhB,CAA2Bh7B,WAA3B,CAAwCC,WAAxC,CAAqD6f,cAArD,GAAwE,CAC5FwX,YAAY,CAACwD,aAAb,CAA2B5jB,IAA3B,CAAiC6jB,OAAjC,CAA0CC,SAA1C,CAAqDh7B,WAArD,CAAkEC,WAAlE,CAA+E6f,cAA/E,CACA,CArPwC,CAiQzC,KAAKmb,WAAL,CAAmB7kB,GAAG,EAAI,CACzBkhB,YAAY,CAAC2D,WAAb,CAAyB7kB,GAAzB,CACA,CAnQwC,CA8QzC,KAAK8kB,eAAL,CAAuB,CAACC,cAAD,CAAiBrb,cAAjB,GAAoC,CAC1DwX,YAAY,CAAC4D,eAAb,CAA6BC,cAA7B,CAA6Crb,cAA7C,CACA,CAhRwC,CAkRzC,KAAKsb,sBAAL,CAA8B,IAAM,CACnC9D,YAAY,CAAC8D,sBAAb,EACA,CApRwC,CAsRxC,GAAIC,aAAY,CAAG,IAAM,CACnB/C,WADmB,EAErBR,WAAW,CAAGwD,qBAAqB,CAAED,YAAF,CAFd,CAGrB,KAAKryB,MAAL,EAHqB,GAKrBuyB,oBAAoB,CAACzD,WAAD,CALC,CAMrBA,WAAW,OANU,CAQxB,CARD,CAUD;;IAGA,KAAK0D,WAAL,CAAmB,IAAM,CAClBlD,WADkB,GAEpBf,KAAK,CAACkE,IAAN,EAFoB,CAGpBnD,WAAW,GAHS,CAKxB,CAxSwC,CA6SzC,KAAKoD,OAAL,CAAe,IAAM,CACbpD,WADa,GAEhBf,KAAK,CAACtqB,KAAN,EAFgB,CAGhBqrB,WAAW,GAHK,CAIhB+C,YAAY,EAJI,CAMpB,CAnTwC,CAqTxBM,IAAI,CAACC,GAAL,EArTwB,CAuTzC;;;;;IAMA,KAAKC,4BAAL,CAAoC5W,gBAAgB,KACnD0S,6BADmD,CAEnDD,0BAA0B,CAACC,6BAAD,CAA1B,CAA4D1S,gBAFT,CAG5C0S,6BAH4C,CA7TX,CAuUzC,KAAKmE,+BAAL,CAAuClqB,EAAE,EAAI,CACxCA,EAAE,GAAI8lB,2BADkC,EAExC,MAAOA,2BAA0B,CAAC9lB,EAAD,CAErC,CA3UwC,CAmVzC,KAAKmqB,6BAAL,CAAqC9W,gBAAgB,KACpD4S,8BADoD,CAEpDD,2BAA2B,CAACC,8BAAD,CAA3B,CAA8D5S,gBAFV,CAG7C4S,8BAH6C,CAnVZ,CA6VzC,KAAKmE,gCAAL,CAAwCpqB,EAAE,EAAI,CACzCA,EAAE,GAAIgmB,4BADmC,EAEzC,MAAOA,4BAA2B,CAAChmB,EAAD,CAEtC,CAjWwC,CAuWzC,KAAKqqB,WAAL,CAAmB,IACXxE,QAxWiC,CAgXzC,KAAKyE,WAAL,CAAmBC,UAAU,EAAI,CAChC1E,QAAQ,CAAG0E,UACX,CAlXwC,CAoXzC,KAAKv4B,cAAL,CAAsB,IACd0zB,YAAY,CAAC1zB,cAAb,EArXiC,CA6XzC,KAAKw4B,aAAL,CAAqBt4B,IAAI,EAAI,CAC5BwzB,YAAY,CAAC8E,aAAb,CAA2Bt4B,IAA3B,CACA,CA/XwC,CAuYzC,KAAKu4B,mBAAL,CAA2BzqB,EAAE,EACrB0lB,YAAY,CAAC+E,mBAAb,CAAiCzqB,EAAjC,CAxYiC,CA8YzC,KAAK0qB,UAAL,CAAkBjnB,MAAM,EAAI,CAC3BiiB,YAAY,CAACiF,SAAb,CAAuBlnB,MAAvB,CACA,CAhZwC,CAuZzC,KAAKmnB,eAAL,CAAuBnnB,MAAM,EAAI,CAGhC,GAFI,MAAA2iB,UAEJ,GADCA,UAAU,CAAG,GAAI78B,MAAK,CAACX,KACxB,EAAI,MAAAu9B,WAAJ,CAA8B,IACvBlF,MAAK,CAAG,KAAK4F,eAAL,EADe,CAEvBnE,MAAM,CAAG,KAAKqE,gBAAL,EAFc,CAG7BZ,WAAW,CAAG,GAAI58B,MAAK,CAACshC,kBAAV,CAA8B,CAAC5J,KAAD,CAAS,CAAvC,CACZA,KAAK,CAAG,CADI,CACDyB,MAAM,CAAE,CADP,CACU,CAACA,MAAD,CAAU,CADpB,CACuB,CADvB,CAC0B,EAD1B,CAHe,CAK7ByD,WAAW,CAACj1B,QAAZ,CAAqBiF,CAArB,CAAyB,EACzB,CACDiwB,UAAU,CAACz1B,GAAX,CAAe8S,MAAf,CACA,CAlawC,CAoazC,GAAMqnB,iBAAgB,CAAGzE,UAAU,EAC3Bzd,OAAO,EAAI,CACjBA,OAAO,CAAClY,WAAR,GADiB,IAEXnG,SAAQ,CAAG,GAAIhB,MAAK,CAACggB,cAAV,CAA0B,CAAEzd,GAAG,CAAE8c,OAAP,CAA1B,CAFA,CAGXmiB,UAAU,CAAGxgC,QAAQ,CAACuB,GAAT,CAAagd,KAAb,CAAmBmY,KAHrB,CAIX+J,WAAW,CAAGzgC,QAAQ,CAACuB,GAAT,CAAagd,KAAb,CAAmB4Z,MAJtB,CAKjB2D,UAAU,CAAC97B,QAAX,CAAsBA,QALL,CAMjB87B,UAAU,CAAClsB,KAAX,CAAiBzE,GAAjB,CAAsBq1B,UAAtB,CAAkCC,WAAlC,CAA+C,CAA/C,CANiB,IAOX/J,MAAK,CAAG,KAAK4F,eAAL,EAPG,CAQXnE,MAAM,CAAG,KAAKqE,gBAAL,EARE,CASjBV,UAAU,CAACn1B,QAAX,CAAoBwE,GAApB,CAAyB,CAACurB,KAAK,CAAG8J,UAAT,EAAqB,CAA9C,CAAiD,CAAC,CAACrI,MAAD,CAAUsI,WAAX,EAAwB,CAAzE,CAA4E,CAA5E,CATiB,CAUjB,KAAKJ,eAAL,CAAqBvE,UAArB,CACA,CAZF,CAqBA;;;;IAzbyC,CA+dzC;;IA/dyC,CAsezC;;;;IAteyC,CAwfzC;;;;IAxfyC,CAogBzC;;;;IApgByC,CAohBzC;;IAphByC,CA8hBzC;;IA9hByC,CAujBzC;;;;;;IApIA,KAAK4E,OAAL,CAAe,IAAM,CACpB5E,UAAU,CAAG,GAAI98B,MAAK,CAACqgB,MADH,CAEPrgB,KAAK,CAAC2hC,UAAN,CAAiBpS,WAAjB,CACX,2CADW,QAC6CgS,gBAAgB,CAACzE,UAAD,CAD7D,CAEb,CAvbwC,CA8bzC,KAAKjvB,MAAL,CAAc,IAAM,CACdqvB,MADc,GAEdjB,SAFc,CAGW,CAAxB,CAAAA,SAAS,CAACsB,WAAV,EAAsD,CAAzB,CAAAtB,SAAS,CAACwB,YAH1B,GAIhBP,MAAM,CAAG,GAAInB,aAAJ,CAAiBE,SAAjB,CAA4B,KAAKyB,cAAjC,CAJO,EAKP1E,MALO,EAME,CAAf,CAAAA,MAAM,CAACtB,KAAP,EAAoC,CAAhB,CAAAsB,MAAM,CAACG,MANd,GAOhB+D,MAAM,CAAG,GAAInB,aAAJ,CAAiB/C,MAAjB,CAAyB,KAAK0E,cAA9B,CAPO,GAUnB,GAAM5vB,MAAK,CAAGsuB,KAAK,CAACwF,QAAN,EAAd,CAEG,IADHzF,YAAY,CAAC0F,gBAAb,CAA8BvF,QAA9B,CAAwCxuB,KAAxC,CAA+C,KAAKxB,aAApD,CACG,CAAIhJ,CAAC,CAAG,CAAR,CAAWA,CAAC,CAAG05B,sBAAsB,CAACx5B,MAAtC,CAA8CF,CAAC,EAA/C,CAAmD,CAC/C,GAAMw+B,UAAS,CAAG9E,sBAAsB,CAAC15B,CAAD,CAAxC,CACAw+B,SAAS,CAACD,gBAAV,CAA2BvF,QAA3B,CAAqCxuB,KAArC,CAA4C,KAAKxB,aAAjD,CACH,CAKF,IAAKkJ,GAAL,GAJE,OAAAonB,WAAW,EAAiB,MAAAC,UAI9B,GAHDX,QAAQ,CAAC6F,UAAT,EAGC,CAFD7F,QAAQ,CAACruB,MAAT,CAAiBgvB,UAAjB,CAA6BD,WAA7B,CAEC,EAAYL,0BAAZ,CACMA,0BAA0B,CAACyF,cAA3B,CAA0CxsB,GAA1C,CADN,EAEI+mB,0BAA0B,CAAC/mB,GAAD,CAA1B,CAAgCpV,IAAhC,EAFJ,CAMA,IAAKoV,GAAL,GADA2mB,aAAY,CAACtuB,MAAb,CAAoBquB,QAApB,CACA,CAAYO,2BAAZ,CACMA,2BAA2B,CAACuF,cAA5B,CAA2CxsB,GAA3C,CADN,EAEIinB,2BAA2B,CAACjnB,GAAD,CAA3B,CAAiCpV,IAAjC,EAGN,CA7dwC,CAkezC,KAAK6hC,kBAAL,CAA0B,IAClB/F,QAneiC,CA2ezC,KAAKgG,aAAL,CAAqBnD,OAAO,EAAI,CAC/B,GAAI5C,YAAY,GAAK4C,OAArB,CACC,SAEG,IAAIz7B,CAAC,CAAG,CAAR,CAAWA,CAAC,CAAG05B,sBAAsB,CAACx5B,MAAtC,CAA8CF,CAAC,EAA/C,CAAmD,CAC/C,GAAMw+B,UAAS,CAAG9E,sBAAsB,CAAC15B,CAAD,CAAxC,CACA,GAAIw+B,SAAS,GAAK/C,OAAlB,CACC,QACJ,CAEJ,QACD,CAtfwC,CA6fzC,KAAKoD,cAAL,CAAsBC,eAAe,EAAI,CACnC,KAAKF,aAAL,CAAmBE,eAAnB,CADmC,GAEvCpF,sBAAsB,CAACh5B,IAAvB,CAA4Bo+B,eAA5B,CAFuC,CAGvCnF,WAAW,CAAC71B,GAAZ,CAAgBg7B,eAAe,CAACC,eAAhB,EAAhB,CAHuC,CAKxC,CAlgBwC,CAygBzC,KAAKrD,iBAAL,CAAyBoD,eAAe,EAAI,CACxC,IAAI9+B,CAAC,CAAG,CAAR,CAAWA,CAAC,CAAG05B,sBAAsB,CAACx5B,MAAtC,CAA8CF,CAAC,EAA/C,CAAmD,CAC/C,GAAMw+B,UAAS,CAAG9E,sBAAsB,CAAC15B,CAAD,CAAxC,CACA,GAAIw+B,SAAS,GAAKM,eAAlB,CAGC,MAFApF,uBAAsB,CAAClnB,MAAvB,CAA8BxS,CAA9B,CAAiC,CAAjC,CAEA,KADA25B,YAAW,CAAC31B,MAAZ,CAAmB86B,eAAe,CAACC,eAAhB,EAAnB,CAGJ,CACJ,CAlhBwC,CAuhBzC,KAAKC,mBAAL,CAA2B,IAAM,CAChC,IAAK,GAAIh/B,GAAC,CAAG,CAAb,CAAgBA,EAAC,CAAG05B,sBAAsB,CAACx5B,MAA3C,CAAmDF,EAAC,EAApD,CACC25B,WAAW,CAAC31B,MAAZ,CAAmB01B,sBAAsB,CAAC15B,EAAD,CAAtB,CAA0B++B,eAA1B,EAAnB,EAEDrF,sBAAsB,CAAClnB,MAAvB,CAA8B,CAA9B,CAAgCknB,sBAAsB,CAACx5B,MAAvD,CACA,CA5hBwC,CAiiBzC,KAAKqH,OAAL,CAAe,IAAM,CAGnB,IAAK,GAAM2K,KAAX,GAFK2nB,YAEL,EADGiD,oBAAoB,CAACzD,WAAD,CACvB,CAAkBI,QAAlB,CACMA,QAAQ,CAACiF,cAAT,CAAwBxsB,IAAxB,CADN,EAEIunB,QAAQ,CAACvnB,IAAD,CAAR,CAAc+sB,QAAd,EAFJ,CAKAxF,QAAQ,CAAG,EARQ,CASnBC,sBAAsB,CAAG,EATN,CAUnBC,WAAW,CAAG,GAAIj9B,MAAK,CAAC4f,KAVL,CAWnB,KAAKygB,WAAL,EAXmB,CAYnB9D,0BAA0B,CAAG,EAZV,CAanBC,6BAA6B,CAAG,CAbb,CAcnBI,WAAW,OAdQ,CAenBC,UAAU,OAfS,CAgBnBC,UAAU,OAhBS,CAiBnB,GAAMvvB,MAAK,CAAG,KAAKqxB,WAAL,CAAiB,SAAjB,CAAd,CACA,KAAKC,eAAL,CAAqBtxB,KAArB,CAlBmB,CAmBnB2vB,MAAM,OACP,CArjBwC,CA8jBzC,KAAKsF,eAAL,CAAuB,CAACC,WAAD,CAAcv9B,QAAd,GAA2B,CACjD,GAAIi3B,YAAJ,CAAkB,IACXuG,cAAa,CAAGvG,YAAY,CAACxuB,qBAAb,EADL,CAEX7K,WAAW,CAAG2/B,WAAW,CAACz2B,cAAZ,EAFH,CAGjB,GAAIlJ,WAAJ,CAAiB,IACVoP,OAAM,CAAGpP,WAAW,CAACC,GAAZ,CAAgB0I,UAAhB,CAA2B3I,WAAW,CAACD,GAAvC,EAA4C,CAD3C,CAEV8/B,OAAO,CAAG,CAAC7/B,WAAW,CAACC,GAAZ,CAAgBG,CAAhB,CAAoBJ,WAAW,CAACD,GAAZ,CAAgBK,CAArC,EAA0C,CAF1C,CAGV0/B,OAAO,CAAG,CAAC9/B,WAAW,CAACC,GAAZ,CAAgBI,CAAhB,CAAoBL,WAAW,CAACD,GAAZ,CAAgBM,CAArC,EAA0C,CAH1C,CAIV0/B,OAAO,CAAG,CAAC//B,WAAW,CAACC,GAAZ,CAAgB6J,CAAhB,CAAoB9J,WAAW,CAACD,GAAZ,CAAgB+J,CAArC,EAA0C,CAJ1C,CAMVk2B,cAAc,CAAGJ,aAAa,CAACK,8BAAd,CAA6CJ,OAA7C,CAAsDC,OAAtD,CAA+DC,OAA/D,CAAwE3wB,MAAxE,CAAgF,EAAhF,CAAoFA,MAAM,CAD7F,CACG,CANP,CAOV8wB,gBAAgB,CAAGN,aAAa,CAACO,kBAAd,EAPT,CAQhBP,aAAa,CAACQ,gBAAd,CAA+BF,gBAA/B,CAAiDF,cAAjD,CAAiE59B,QAAjE,CARgB,CAShBw9B,aAAa,CAACS,sBAAd,EACA,CACD,CACD,CA9kBwC,CAglBxC,KAAKC,QAAL,CAAgB,MACVlH,QADU,EAELA,QAAQ,CAACmH,YAAT,CAAsBD,QAGlC,C;;;;;;ACnmBD,iE;;;;;;GCAMpjC,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACf+kC,WAAW,CAAG/kC,mBAAO,CAAC,EAAD,CAAP,CAAyB+kC,W,CACvCC,aAAa,CAAGhlC,mBAAO,CAAC,EAAD,CAAP,CAA2BglC,a,CAC3C/jC,QAAQ,CAAGjB,mBAAO,CAAC,EAAD,CAAP,CAAsBiB,Q,CAEnCgF,SAAS,CAAG,C,CAEVC,WAAW,CAAG,UAAY,CAC9B,MAAO,KAAOD,SAAS,EACxB,C,CAEKg/B,eAAe,CAAG,UAAW,CACjC,MAAO,CACLC,QAAQ,CAAE,QADL,CAELC,gBAAgB,CAAE,GAFb,CAGLC,UAAU,CAAE,EAHP,CAKR,C,CAEKC,eAAe,CAAG,G,CAExB;;;;;;;;;;GAWA1jC,OAAO,CAACb,KAAR,CAAgB,SAAU28B,WAAV,CAAuB6H,UAAvB,CAAmC,IAC3C5H,UAAS,CAAGD,WAD+B,CAE7C37B,YAAY,OAFiC,CAG7CyjC,WAAW,CAAG,GAAIR,YAAJ,CAAgB,IAAhB,CAH+B,CAI7CS,OAAO,OAJsC,CAK3Cx2B,KAAK,CAAG,GAAIvN,MAAK,CAACX,KALyB,CAM3C2kC,UAAU,CAAG,IAAKzlC,mBAAO,CAAC,EAAD,CAAP,CAAoB0lC,MAAzB,CAN8B,CAOjD12B,KAAK,CAACnG,GAAN,CAAU48B,UAAU,CAACriB,QAAX,EAAV,CAPiD,CAWjD,KAAKuiB,gBAAL,OAXiD,CAejD,KAAKC,OAAL,OAfiD,CAgBjD,KAAKt3B,MAAL,OAhBiD,IAiB7C3H,SAAQ,CAAG,GAjBkC,CAkB7Ck/B,kBAAkB,OAlB2B,CAmBjD,KAAK9E,SAAL,OAnBiD,IAoB7C+E,iBAAgB,GApB6B,CAqB7CC,YAAY,OArBiC,CAsBjD,KAAKC,aAAL,GAtBiD,CAuBjD,KAAKh4B,cAAL,GAvBiD,CAwBjD,KAAKi4B,cAAL,GAxBiD,CAyBjD,KAAKC,cAAL,CAAsB,CACpBC,QAAQ,CAAE,EADU,CAEpBC,QAAQ,CAAE,EAFU,CAGpBjN,KAAK,CAAE,GAHa,CAIpByB,MAAM,CAAE,GAJY,CAKpByL,KAAK,CAAE,UALa,CAMpBC,cAAc,GANM,CAzB2B,IAiC7CC,QAAO,CAAG,CAAC5hC,CAAC,CAAE,CAAJ,CAAQC,CAAC,CAAE,CAAX,CAjCmC,CAkC7CuU,QAAQ,CAAG8rB,eAAe,EAlCmB,CAmC7CuB,aAAa,CAAG,GAAI/kC,MAAK,CAACiD,OAnCmB,CAoC7C+hC,mBAAmB,CAAG,EApCuB,CAqCjD,KAAKC,0BAAL,GArCiD,CAsCjD,KAAKj/B,IAAL,CAAYvB,WAAW,EAtC0B,IAwC3C64B,gBAAe,CAAG,IAClBrB,SADkB,CAEiB,WAAjC,QAAOA,UAAS,CAACsB,WAFD,CAKXtB,SAAS,CAACvE,KALC,CAGXuE,SAAS,CAACsB,WAHC,CAMf,CA9CwC,CAkD3CC,gBAAgB,CAAG,IACnBvB,SADmB,CAEiB,WAAlC,QAAOA,UAAS,CAACwB,YAFA,CAKZxB,SAAS,CAAC9C,MALE,CAGZ8C,SAAS,CAACwB,YAHE,CAMhB,CAxDwC,CAiEjD,KAAKyH,mBAAL,CAA2B,IAClBpB,WAAW,CAACoB,mBAAZ,EAlEwC,CAsEjD,KAAKxH,cAAL,CAAsB,IAAM,CAC1B,KAAK7wB,MAAL,CAAYs4B,MAAZ,CAAqB7H,eAAe,GAAKE,gBAAgB,EAD/B,CAE1B,KAAK3wB,MAAL,CAAYu4B,sBAAZ,EAF0B,CAG1B,KAAKX,cAAL,CAAoBI,cAApB,GAH0B,CAI1BT,kBAAkB,CAACiB,QAAnB,EACD,CA3EgD,CAgFjD,KAAK9F,SAAL,CAAiB,IAAM,CACrB,KAAK7B,cAAL,EADqB,CAErB0G,kBAAkB,CAAC7E,SAAnB,EACD,CAnFgD,CAwFjD,KAAK+F,0BAAL,CAAkCC,IAAI,EAAI,CACxCnB,kBAAkB,CAACkB,0BAAnB,CAA8CC,IAA9C,CACD,CA1FgD,CA4FjD;AACA,GAAMC,YAAW,CAAG,IAAM,CACxB,KAAK34B,MAAL,CAAc,GAAI7M,MAAK,CAACylC,iBAAV,CAA4B,EAA5B,CAAgCnI,eAAe,GAAKE,gBAAgB,EAApE,CAAwE,CAAxE,CAA6E,EAA7E,CADU,CAExB,KAAK2G,OAAL,CAAe,GAAInkC,MAAK,CAAC0lC,YAAV,CAAuB,QAAvB,CAAiC,EAAjC,CAFS,CAGxBn4B,KAAK,CAACnG,GAAN,CAAU,KAAK+8B,OAAf,CAHwB,CAKxB,KAAKD,gBAAL,CAAwB,GAAIlkC,MAAK,CAAC2lC,gBAAV,CAA2B,QAA3B,CAAqC,EAArC,CALA,CAMxBp4B,KAAK,CAACnG,GAAN,CAAU,KAAK88B,gBAAf,CANwB,CAOxBE,kBAAkB,CAAG,IAAK7lC,mBAAO,CAAC,EAAD,CAAP,CAAsBkB,cAA3B,EAA2C,KAAKoN,MAAhD,CAAwDg3B,UAAU,CAACrF,UAAnE,CAA+EqF,UAA/E,CAA2F,IAA3F,CAPG,CASxBO,kBAAkB,CAACwB,mBAAnB,CAAuC,KAAK1B,gBAA5C,CATwB,CAUxBE,kBAAkB,CAAC7E,SAAnB,EAVwB,CAYxBwE,OAAO,CAAG,IAAKxlC,mBAAO,CAAC,EAAD,CAAP,CAAqBsnC,OAA1B,EAAmC,IAAnC,CACX,CAbD,CAeAL,WAAW,EA5GsC,CAoHjD,KAAKM,QAAL,CAAgBC,QAAQ,EAAI,CAC1B,GAAMC,SAAQ,CAAG,GAAIxmC,SAArB,CAGA,MAFAwmC,SAAQ,CAACC,aAAT,CAAuBF,QAAvB,CAEA,CADA3B,kBAAkB,CAAC8B,wBAAnB,CAA4CF,QAA5C,CACA,GACD,CAzHgD,CAgIjD,KAAKG,kBAAL,CAA0B,CAACC,WAAD,CAAcC,OAAd,GAA0B,CAClD,IAAK,GAAM,CAACp/B,IAAD,CAAO8+B,QAAP,CAAX,EAA+B1hC,OAAM,CAACgiC,OAAP,CAAeA,OAAf,CAA/B,CAAwD,CACtD,GAAMC,SAAQ,CAAG,GAAI9mC,SAArB,CACA8mC,QAAQ,CAACL,aAAT,CAAuBF,QAAvB,CAFsD,CAGtD3B,kBAAkB,CAACmC,WAAnB,CAA+Bt/B,IAA/B,CAAqCq/B,QAArC,CACD,CACDlC,kBAAkB,CAACoC,kBAAnB,CAAsCJ,WAAtC,CACD,CAvIgD,CA8IjD,KAAKp6B,cAAL,CAAsB,IACbg4B,UAAU,CAACh4B,cAAX,IA/IwC,CAwJjD,KAAK0zB,sBAAL,CAA8B58B,WAAW,EAAI,CAC3C,GAAIA,WAAJ,CAAiB,CACf;AADe,GAEToP,OAAM,CAAGpP,WAAW,CAACC,GAAZ,CAAgB0I,UAAhB,CAA2B3I,WAAW,CAACD,GAAvC,EAA8C,CAF9C,CAGT8/B,OAAO,CAAG,CAAC7/B,WAAW,CAACC,GAAZ,CAAgBG,CAAhB,CAAoBJ,WAAW,CAACD,GAAZ,CAAgBK,CAArC,EAA0C,CAH3C,CAIT0/B,OAAO,CAAG,CAAC9/B,WAAW,CAACC,GAAZ,CAAgBI,CAAhB,CAAoBL,WAAW,CAACD,GAAZ,CAAgBM,CAArC,EAA0C,CAJ3C,CAKT0/B,OAAO,CAAG,CAAC//B,WAAW,CAACC,GAAZ,CAAgB6J,CAAhB,CAAoB9J,WAAW,CAACD,GAAZ,CAAgB+J,CAArC,EAA0C,CAL3C,CAOT05B,QAAQ,CAAGlC,kBAAkB,CAACrB,8BAAnB,CAAkDJ,OAAlD,CAA2DC,OAA3D,CAAoEC,OAApE,CAA6E3wB,MAA7E,CAAqF,EAArF,CAAyFA,MAAM,CAD5F,CACH,CAPF,CASfkyB,kBAAkB,CAAC8B,wBAAnB,CAA4CI,QAA5C,CACD,CACF,CApKgD,CAyKjD,KAAK9G,OAAL,CAAe,IAAM,CACnB,GAAM18B,YAAW,CAAG,KAAKkJ,cAAL,EAApB,CACA,KAAK0zB,sBAAL,CAA4B58B,WAA5B,CACD,CA5KgD,CAoLjD,KAAK2jC,eAAL,CAAuB3c,gBAAgB,EAAI,CACzCka,UAAU,CAACyC,eAAX,CAA2B3c,gBAA3B,IACD,CAtLgD,CA8LjD,KAAK4c,eAAL,CAAuB5c,gBAAgB,EAAI,CACzCka,UAAU,CAAC0C,eAAX,CAA2B5c,gBAA3B,IACD,CAhMgD,CAwMjD,KAAK6c,eAAL,CAAuB7c,gBAAgB,EAAI,CACzCka,UAAU,CAAC2C,eAAX,CAA2B7c,gBAA3B,IACD,CA1MgD,CAkNjD,KAAK8c,WAAL,CAAmB9c,gBAAgB,EAAI,CACrCka,UAAU,CAAC4C,WAAX,CAAuB9c,gBAAvB,IACD,CApNgD,CA4NjD,KAAK+c,2BAAL,CAAmCC,SAAS,EACnC9C,UAAU,CAAC6C,2BAAX,CAAuCC,SAAvC,IA7NwC,CAsOjD,KAAKC,0BAAL,CAAkCD,SAAS,EAClC9C,UAAU,CAAC+C,0BAAX,CAAsCD,SAAtC,IAvOwC,CA+OjD,KAAKE,0BAAL,CAAkCF,SAAS,EAClC9C,UAAU,CAACgD,0BAAX,CAAsCF,SAAtC,IAhPwC,CAyPjD,KAAKG,sBAAL,CAA8BH,SAAS,EAC9B9C,UAAU,CAACiD,sBAAX,CAAkCH,SAAlC,IA1PwC,CAqQjD,KAAKI,wBAAL,CAAgCJ,SAAS,EAChC9C,UAAU,CAACkD,wBAAX,CAAoCJ,SAApC,IAtQwC,CAyQjD,KAAKK,2BAAL,CAAmCthC,YAAY,EACtCm+B,UAAU,CAACmD,2BAAX,CAAuCthC,YAAvC,IA1QwC,CAmRjD,KAAKuhC,2BAAL,CAAmCC,YAAY,EAAI,CAEjD,OACMp7B,IADN,CADInJ,WAAW,OACf,CAASQ,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG+jC,YAAY,CAAC7jC,MAAjC,CAAyCF,CAAC,EAA1C,CACM2I,GADN,CACYo7B,YAAY,CAAC/jC,CAAD,CAAZ,CAAgB0I,cAAhB,EADZ,CAEMC,GAFN,GAGSnJ,WAHT,CAMMA,WAAW,CAAConB,KAAZ,CAAkBje,GAAlB,CANN,CAIMnJ,WAAW,CAAGmJ,GAJpB,EASA,MAAOnJ,YACR,CA/RgD,CAySjD,KAAKwkC,gBAAL,CAAwBrxB,KAAK,EAAI,CAC/BA,KAAK,CAACxI,OAAN,CAAc,KAAKZ,MAAnB,CAD+B,IAE3B6qB,MAAK,CAAG4F,eAAe,EAFI,CAG3BnE,MAAM,CAAGqE,gBAAgB,EAHE,CAI3B+J,SAAS,CAAI7P,KAAK,CAAG,CAJM,CAK3B8P,UAAU,CAAIrO,MAAM,CAAG,CALI,CAQ/B,MAFAljB,MAAK,CAAC/S,CAAN,CAAW+S,KAAK,CAAC/S,CAAN,CAAUqkC,SAAX,CAAwBA,SAElC,CADAtxB,KAAK,CAAC9S,CAAN,CAAU,EAAG8S,KAAK,CAAC9S,CAAN,CAAUqkC,UAAb,EAA2BA,UACrC,CAAOvxB,KACR,CAlTgD,CA0TjD,KAAKwxB,kBAAL,CAA0BC,WAAW,EAAI,CACvC,GAAIA,WAAW,EAAyB,CAArB,CAAAA,WAAW,CAAClkC,MAA/B,CAA2C,IACrCV,YAAW,CAAG,KAAKskC,2BAAL,CAAiCM,WAAjC,CADuB,CAEnCz8B,MAAM,CAAG,GAAIjL,MAAK,CAAC4F,OAFgB,CAIzC,MADA9C,YAAW,CAACoI,SAAZ,CAAsBD,MAAtB,CACA,CAAO,KAAKq8B,gBAAL,CAAsBr8B,MAAtB,CACR,CAEF,CAlUgD,CA2UjD,KAAK08B,uBAAL,CAA+B1gC,IAAI,EAAI,CACrC,GAAIygC,YAAW,CAAG,KAAKR,wBAAL,CAA8BjgC,IAA9B,CAAlB,CACA,MAAO,MAAKwgC,kBAAL,CAAwBC,WAAxB,CACR,CA9UgD,CAsVjD,KAAKE,aAAL,CAAqBnoB,UAAU,EAAI,CAC7BA,UAD6B,GAE/BukB,UAAU,CAAC4D,aAAX,CAAyBnoB,UAAzB,CAF+B,CAG3B2kB,kBAH2B,EAI7BA,kBAAkB,CAACyD,2BAAnB,CAA+C,IAA/C,CAJ6B,CAMlC,CA5VgD,CAwWjD,KAAKC,eAAL,CAAuB,CAACC,OAAD,CAAUC,QAAV,CAAoBpjC,SAApB,CAA+B+f,cAA/B,GAAkD,CACvEmf,WAAW,CAACgE,eAAZ,CAA4B9D,UAA5B,CAAwC+D,OAAxC,CAAiDC,QAAjD,CAA2DpjC,SAA3D,CAAsE+f,cAAtE,CACD,CA1WgD,CAuXjD,KAAKsjB,eAAL,CAAuB,CAAChtB,GAAD,CAAMpW,WAAN,CAAmBC,WAAnB,CAAgCF,SAAhC,CAA2C+f,cAA3C,GAA8D,CACnFmf,WAAW,CAACmE,eAAZ,CAA4BjE,UAA5B,CAAwC/oB,GAAxC,CAA6CpW,WAA7C,CAA0DC,WAA1D,CAAuEF,SAAvE,CAAkF+f,cAAlF,CACD,CAzXgD,CAsYjD,KAAKujB,YAAL,CAAoB,CAACjtB,GAAD,CAAMpW,WAAN,CAAmBC,WAAnB,CAAgCF,SAAhC,CAA2C+f,cAA3C,GAA8D,CAChFmf,WAAW,CAACoE,YAAZ,CAAyBlE,UAAzB,CAAqC/oB,GAArC,CAA0CpW,WAA1C,CAAuDC,WAAvD,CAAoEF,SAApE,CAA+E+f,cAA/E,CACD,CAxYgD,CAmZjD,KAAKwjB,OAAL,CAAe,CAACltB,GAAD,CAAMrW,SAAN,CAAiB+f,cAAjB,GAAoC,CACjDmf,WAAW,CAACqE,OAAZ,CAAoBnE,UAApB,CAAgC/oB,GAAhC,CAAqCrW,SAArC,CAAgD+f,cAAhD,CACD,CArZgD,CAgajD,KAAKyjB,OAAL,CAAe,CAACntB,GAAD,CAAMrW,SAAN,CAAiB+f,cAAjB,GAAoC,CACjDmf,WAAW,CAACsE,OAAZ,CAAoBpE,UAApB,CAAgC/oB,GAAhC,CAAqCrW,SAArC,CAAgD+f,cAAhD,CACD,CAlagD,CA4ajD,KAAK0jB,eAAL,CAAuB,CAACptB,GAAD,CAAM0J,cAAN,CAAsB2jB,oBAAtB,GAA+C,CACpExE,WAAW,CAACuE,eAAZ,CAA4BrE,UAA5B,CAAwC/oB,GAAxC,CAA6C0J,cAA7C,CAA6D2jB,oBAA7D,CACD,CA9agD,CAsbjD,KAAK3I,aAAL,CAAqB,CAAC5jB,IAAD,CAAO6jB,OAAP,CAAgBC,SAAhB,CAA2Bh7B,WAA3B,CAAwCC,WAAxC,CAAqD6f,cAArD,GAAwE,CAC3Fmf,WAAW,CAACnE,aAAZ,CAA0BqE,UAAU,CAAEjoB,IAAtC,CAA4C6jB,OAA5C,CAAqDC,SAArD,CAAgEh7B,WAAhE,CAA6EC,WAA7E,CAA0F6f,cAA1F,CACD,CAxbgD,CA8bjD,KAAKmb,WAAL,CAAmB7kB,GAAG,EAAI,CACxB6oB,WAAW,CAAChE,WAAZ,CAAwB7kB,GAAxB,CACD,CAhcgD,CA0cjD,KAAK8kB,eAAL,CAAuB,CAACC,cAAD,CAAiBrb,cAAjB,GAAoC,CACzDmf,WAAW,CAAC/D,eAAZ,CAA4BC,cAA5B,CAA4Crb,cAA5C,CACD,CA5cgD,CAidjD,KAAK4jB,QAAL,CAAgB,CAACttB,GAAD,CAAM0J,cAAN,CAAsBjkB,OAAtB,GAAkC,CAChDojC,WAAW,CAACyE,QAAZ,CAAqBvE,UAArB,CAAiC/oB,GAAjC,CAAsC0J,cAAtC,CAAsDjkB,OAAtD,CACD,CAndgD,CAsdjD,KAAKu/B,sBAAL,CAA8B,IAAM,CAClCmE,kBAAkB,CAACnE,sBAAnB,EACD,CAxdgD,CA8djD,KAAKmB,SAAL,CAAiBlnB,MAAM,EAAI,CACzB3M,KAAK,CAACnG,GAAN,CAAU8S,MAAV,CACD,CAhegD,CAsejD,KAAKsuB,YAAL,CAAoBtuB,MAAM,EAAI,CAC5B3M,KAAK,CAACjG,MAAN,CAAa4S,MAAb,CACD,CAxegD,CA8ejD,KAAKzR,cAAL,CAAsB,IAAM,CAC1B,GAAIpI,YAAY,MAAhB,CACE,MAAOA,aAAY,CAACoI,cAAb,CAA4BvD,QAA5B,CAAP,CAEF,GAAMyD,KAAI,CAAGq7B,UAAU,CAACv7B,cAAX,EAAb,CAJ0B,MAKb,CAAC,CAAV,GAAAE,IALsB,CAQnB,CARmB,CAMjBA,IAGV,CAvfgD,CA6fjD,KAAKs4B,aAAL,CAAsBt4B,IAAD,EAAU,CACzBtI,YAAY,MADa,EAE3BA,YAAY,CAACgJ,YAAb,CAA0BV,IAA1B,CAAgCzD,QAAhC,CAF2B,CAI7B8+B,UAAU,CAAC36B,YAAX,CAAwBV,IAAxB,IACD,CAlgBgD,CAygBjD,KAAKc,aAAL,CAAqB,OACfpJ,YAAY,EAAIA,YAAY,CAACwtB,KAA7B,EAAsC,CAACxtB,YAAY,CAACwtB,KAAb,CAAmBlc,KAD3C,GAIZqyB,UAAU,CAACv6B,aAAX,EA7gBwC,CAohBjD,KAAKo4B,gBAAL,CAAwB,CAACvF,QAAD,CAAWxuB,KAAX,CAAkBxB,aAAlB,GAAoC,CAC1D;AACA,GAAI5L,QAAO,CAAG,CACNmM,MADM,CACGu3B,kBADH,CAEN73B,cAFM,CAEY,KAAKA,cAFjB,CAGNO,YAHM,CAGS,EAHT,CAAd,CAID,IAAIzM,YAAJ,CAsBK,GAAKyjC,WAAW,CAAC2E,cAtBtB,EAuBKrE,kBAAkB,CAAC16B,MAAnB,CAA0BoE,KAA1B,CAvBL,CAwBKk2B,UAAU,CAACnC,gBAAX,CAA4BvF,QAA5B,CAAsCxuB,KAAtC,CAA6CxB,aAA7C,CAA4D5L,OAA5D,IAxBL,EA0BE0jC,kBAAkB,CAAC16B,MAAnB,CAA0B,CAA1B,CA1BF,KACC,IAAIrJ,YAAY,CAACk0B,aAAb,EAAJ,CAAkC,CAC7BjoB,aAD6B,CAE5BjM,YAAY,CAACwtB,KAAb,CAAmB3lB,IAAnB,EAF4B,CAIhC7H,YAAY,CAACwtB,KAAb,CAAmB6a,KAAnB,EAJgC,CAM9B,GAAM3U,YAAW,CAAG1zB,YAAY,CAACwtB,KAAb,CAAmBkG,WAAnB,CAClB1zB,YAAY,CAAC2zB,gBAAb,EADkB,CACgB9uB,QADpC,CAEC,GAAK4+B,WAAW,CAAC2E,cARY,EAShCrE,kBAAkB,CAACuE,OAAnB,CAA2B5U,WAA3B,CATgC,CAUhCqQ,kBAAkB,CAAC16B,MAAnB,CAA0B,CAA1B,CAVgC,CAW5Bs6B,UAAU,CAAC36B,YAAX,CAAwB0qB,WAAxB,IAX4B,CAY5BiQ,UAAU,CAACnC,gBAAX,CAA4B,CAA5B,CAA+B,CAA/B,CAAkCv1B,aAAlC,WAZ4B,EAchC83B,kBAAkB,CAAC16B,MAAnB,CAA0B,CAA1B,CAGD,CAjBD,IAkBCk/B,WAAU,CAAG,CAUf,CAvjBgD,CA6jBjD,KAAKvG,eAAL,CAAuB,IACd90B,KA9jBwC,CAikBjD,KAAKs7B,eAAL,CAAwBC,cAAD,EAAoB,CACpCzoC,YADoC,GAEvCA,YAAY,CAAGyoC,cAFwB,CAG1C,CApkBgD,CA2kBjD,KAAK3J,wBAAL,CAAgClC,WAAW,EAAI,CAC7C1vB,KAAK,CAACnG,GAAN,CAAU61B,WAAV,CACD,CA7kBgD,IA+kB7C8L,mBAAkB,CAAG,CAACnE,KAAD,CAAQF,QAAR,CAAkBC,QAAlB,CAA4BjN,KAA5B,CAAmCyB,MAAnC,CACvB6P,cADuB,CACPC,eADO,GACa,IAChC/lC,EAAC,CAAG,CAD4B,CAEhCC,CAAC,CAAG,CAF4B,CAiBpC,MAbEA,EAaF,CAdIyhC,KAAK,CAACsE,QAAN,CAAe,KAAf,CAcJ,CAbMD,eAAe,CAAG9P,MAAlB,CAA2BwL,QAajC,CAZWC,KAAK,CAACsE,QAAN,CAAe,QAAf,CAYX,CAXMvE,QAWN,CATMj3B,IAAI,CAAC8O,KAAL,CAAW,CAACysB,eAAe,CAAG9P,MAAnB,EAA6B,CAAxC,CASN,CANEj2B,CAMF,CAPI0hC,KAAK,CAACsE,QAAN,CAAe,MAAf,CAOJ,CANMxE,QAMN,CALWE,KAAK,CAACsE,QAAN,CAAe,OAAf,CAKX,CAJMF,cAAc,CAAGtE,QAAjB,CAA2BhN,KAIjC,CAFMhqB,IAAI,CAAC8O,KAAL,CAAW,CAACwsB,cAAc,CAAGtR,KAAlB,EAA2B,CAAtC,CAEN,CAAO,CAACx0B,CAAC,CAAEA,CAAJ,CAAOC,CAAC,CAAEA,CAAV,CACR,CAlmBgD,CAomB3CgmC,aAAa,CAAGjN,QAAQ,EAAI,CAC5B,UAAKsI,cADuB,GAE9BtI,QAAQ,CAACkN,cAAT,IAF8B,CAG9BlN,QAAQ,CAAC8B,OAAT,CAAiB+G,aAAjB,CAH8B,CAI1B,KAAKN,cAAL,CAAoBI,cAJM,GAK5BC,OAAO,CAAGiE,kBAAkB,CAAC,KAAKtE,cAAL,CAAoBG,KAArB,CAC1B,KAAKH,cAAL,CAAoBC,QADM,CAE1B,KAAKD,cAAL,CAAoBE,QAFM,CAG1B,KAAKF,cAAL,CAAoB/M,KAHM,CAI1B,KAAK+M,cAAL,CAAoBtL,MAJM,CAK1B4L,aAAa,CAAC7hC,CALY,CAKT6hC,aAAa,CAAC5hC,CALL,CALA,CAW5B,KAAKshC,cAAL,CAAoBI,cAApB,GAX4B,EAa9B3I,QAAQ,CAACmN,UAAT,CACEvE,OAAO,CAAC5hC,CADV,CAEE4hC,OAAO,CAAC3hC,CAFV,CAGE,KAAKshC,cAAL,CAAoB/M,KAHtB,CAIE,KAAK+M,cAAL,CAAoBtL,MAJtB,CAb8B,CAkB9B+C,QAAQ,CAACoN,WAAT,CACExE,OAAO,CAAC5hC,CADV,CAEE4hC,OAAO,CAAC3hC,CAFV,CAGE,KAAKshC,cAAL,CAAoB/M,KAHtB,CAIE,KAAK+M,cAAL,CAAoBtL,MAJtB,CAlB8B,CAuB9B4K,OAAO,CAACwF,YAAR,EAvB8B,CAwB9Bh8B,KAAK,CAACnG,GAAN,CAAU28B,OAAO,CAACyF,IAAlB,CAxB8B,CAyB9BtN,QAAQ,CAACruB,MAAT,CAAgBN,KAAhB,CAAuBw2B,OAAO,CAACl3B,MAA/B,CAzB8B,CA0B9BU,KAAK,CAACjG,MAAN,CAAay8B,OAAO,CAACyF,IAArB,CA1B8B,CA2B9BtN,QAAQ,CAACkN,cAAT,IA3B8B,CA4B9BlN,QAAQ,CAACoN,WAAT,CAAqB,CAArB,CAAwB,CAAxB,CAA2BvE,aAAa,CAAC7hC,CAAzC,CAA4C6hC,aAAa,CAAC5hC,CAA1D,CA5B8B,CA8BjC,CAloBgD,CAwoBjD,KAAK0K,MAAL,CAAcquB,QAAQ,EAAI,CACpB,KAAKqI,aADe,EAEtBrI,QAAQ,CAACuN,KAAT,EAFsB,CAGpBpF,gBAAgB,EAAIC,YAHA,CAItBA,YAAY,CAACz2B,MAAb,CAAoBN,KAApB,CAA2B,KAAKV,MAAhC,CAJsB,EAMtBqvB,QAAQ,CAACruB,MAAT,CAAgBN,KAAhB,CAAuB,KAAKV,MAA5B,CANsB,CAOtBs8B,aAAa,CAACjN,QAAD,CAPS,CASzB,CAjpBgD,CAypBjD,KAAKgD,2BAAL,CAAmCh1B,IAAI,EAAI,CACrC,IAAAA,IADqC,CAEvCk6B,kBAAkB,CAACn3B,MAAnB,EAFuC,CAIvCm3B,kBAAkB,CAAC33B,OAAnB,EACH,CA9pBgD,CAoqBjD,KAAKkB,qBAAL,CAA6B,IACpBy2B,kBArqBwC,CA4qBjD,KAAK/B,eAAL,CAAuB,IACd90B,KA7qBwC,CAqrBjD,KAAKtH,WAAL,CAAmBC,UAAU,EAAI,CAC/B89B,UAAU,CAAC/9B,WAAX,CAAuBC,UAAvB,CAD+B,CAE/BhB,QAAQ,CAAGgB,UAFoB,CAG/Bk+B,kBAAkB,CAACsF,eAAnB,CAAmCxjC,UAAnC,CAH+B,CAI/B49B,WAAW,CAAC5+B,QAAZ,CAAuBgB,UACxB,CA1rBgD,CAgsBjD,KAAKC,WAAL,CAAmB,IACVjB,QAjsBwC,CAysBjD,KAAKykC,qBAAL,CAA6BC,UAAU,EAAI,CACrC,IAAAA,UADqC,EAElCtF,YAFkC,GAGrCA,YAAY,CAAG,GAAI/lC,oBAAJ,CAAY,EAAZ,EAA0BsB,YAA1B,CAAuCgkC,UAAvC,CAHsB,EAMzCA,UAAU,CAAChP,OAAX,CAAmByI,eAAe,EAAlC,CAAsCE,gBAAgB,EAAtD,CANyC,CAOzC,KAAK3wB,MAAL,CAAYu4B,sBAAZ,EAPyC,CAQzCf,gBAAgB,CAAGuF,UACpB,CAltBgD,CA0tBjD,KAAKC,eAAL,CAAuBpqB,UAAU,EACxBukB,UAAU,CAAC8F,gBAAX,CAA4BrqB,UAA5B,IA3tBwC,CAsuBjD,KAAKsqB,4BAAL,CAAoC,CAACjnC,WAAD,CAAcknC,cAAd,GAAiC,CACnE,GAAIlnC,WAAJ,CAAiB,CACf,GAAMmI,OAAM,CAAG,GAAIjL,MAAK,CAAC4F,OAAzB,CACA9C,WAAW,CAACoI,SAAZ,CAAsBD,MAAtB,CAFe,IAGTq7B,SAAQ,CAAG,KAAK34B,qBAAL,GAA6Bs1B,kBAA7B,EAHF,CAITlF,MAAM,CAAG,GAAI/9B,MAAK,CAAC4F,OAAV,CAAkB0gC,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CAAlB,CACb3D,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CADa,CACe3D,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CADf,CAJA,CAMTC,WAAW,CAAG,GAAIlqC,MAAK,CAAC4F,OAAV,CAAkB0gC,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CAAlB,CAClB5D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CADkB,CACO5D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CADP,CANL,CAQTC,QAAQ,CAAG,GAAInqC,MAAK,CAAC4F,OAAV,CAAkB0gC,QAAQ,CAAC6D,QAAT,CAAkB,CAAlB,CAAlB,CACf7D,QAAQ,CAAC6D,QAAT,CAAkB,CAAlB,CADe,CACO7D,QAAQ,CAAC6D,QAAT,CAAkB,CAAlB,CADP,CARF,CAUTC,OAAO,CAAG,GAAIpqC,MAAK,CAAC4F,OAVX,CAWTykC,OAAO,CAAG,GAAIrqC,MAAK,CAAC4F,OAXX,CAYfwkC,OAAO,CAACz3B,UAAR,CAAmBorB,MAAnB,CAA2BmM,WAA3B,EAAwCn6B,SAAxC,EAZe,CAafs6B,OAAO,CAAC13B,UAAR,CAAmBorB,MAAnB,CAA2B9yB,MAA3B,EAAmC8E,SAAnC,EAbe,CAcf,GAAMu6B,QAAO,CAAG,GAAItqC,MAAK,CAAC4F,OAA1B,CACA0kC,OAAO,CAACC,YAAR,CAAqBH,OAArB,CAA8BC,OAA9B,CAfe,CAgBf,GAAMj6B,MAAK,CAAGg6B,OAAO,CAACI,OAAR,CAAgBH,OAAhB,CAAd,CACqB,CAAjB,CAAAL,cAjBW,EAkBb,KAAKr8B,qBAAL,GAA6B88B,sBAA7B,CAAoDH,OAApD,CACEl6B,KADF,CACS45B,cADT,CAlBa,CAoBb,KAAKr8B,qBAAL,GAA6Bw1B,sBAA7B,EApBa,EAsBb,KAAKx1B,qBAAL,GAA6B+8B,sBAA7B,CAAoDJ,OAApD,CAA6Dl6B,KAA7D,CAEH,CACF,CAhwBgD,CAywBjD,KAAKu6B,uBAAL,CAA+B,CAAClrB,UAAD,CAAauqB,cAAb,GAAgC,CAC7D,GAAI,KAAKH,eAAL,CAAqBpqB,UAArB,CAAJ,CAAsC,CACpC,GAAM3c,YAAW,CAAG2c,UAAU,CAACzT,cAAX,EAApB,CACA,KAAK+9B,4BAAL,CAAkCjnC,WAAlC,CAA+CknC,cAA/C,CACD,CACF,CA9wBgD,CAqxBjD,KAAKY,uBAAL,CAA+BnrB,UAAU,EAAI,CAC3C,GAAI,KAAKoqB,eAAL,CAAqBpqB,UAArB,CAAJ,CAAsC,IAC9BxU,OAAM,CAAG,GAAIjL,MAAK,CAAC4F,OADW,CAE9B9C,WAAW,CAAG2c,UAAU,CAACzT,cAAX,EAFgB,CAG9Bs6B,QAAQ,CAAG,KAAK34B,qBAAL,GAA6Bs1B,kBAA7B,EAHmB,CAIpCngC,WAAW,CAACoI,SAAZ,CAAsBD,MAAtB,CAJoC,IAK9B8yB,OAAM,CAAG,GAAI/9B,MAAK,CAAC4F,OAAV,CAAkB0gC,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CAAlB,CACb3D,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CADa,CACe3D,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CADf,CALqB,CAO9BC,WAAW,CAAG,GAAIlqC,MAAK,CAAC4F,OAAV,CAAkB0gC,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CAAlB,CAClB5D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CADkB,CACO5D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CADP,CAPgB,CAS9BE,OAAO,CAAG,GAAIpqC,MAAK,CAAC4F,OATU,CAU9BykC,OAAO,CAAG,GAAIrqC,MAAK,CAAC4F,OAVU,CAWpCwkC,OAAO,CAACz3B,UAAR,CAAmBu3B,WAAnB,CAAgCnM,MAAhC,CAXoC,CAYpCsM,OAAO,CAACQ,UAAR,CAAmB5/B,MAAnB,CAA2Bm/B,OAA3B,CAZoC,CAapC9D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,EAA0BG,OAAO,CAACnnC,CAbE,CAcpCojC,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,EAA0BG,OAAO,CAAClnC,CAdE,CAepCmjC,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,EAA0BG,OAAO,CAACz9B,CAfE,CAgBpC05B,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,EAA6Bh/B,MAAM,CAAC/H,CAhBA,CAiBpCojC,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,EAA6Bh/B,MAAM,CAAC9H,CAjBA,CAkBpCmjC,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,EAA6Bh/B,MAAM,CAAC2B,CAlBA,CAmBpC,KAAKe,qBAAL,GAA6Bu4B,wBAA7B,CAAsDI,QAAtD,CACD,CACF,CA3yBgD,CAizBjD,KAAKwE,oBAAL,CAA4B,IACnBzG,gBAlzBwC,CA0zBjD,KAAK0G,gBAAL,CAAwBtrB,UAAU,EAAI,CACpCukB,UAAU,CAAC+G,gBAAX,CAA4BtrB,UAA5B,CADoC,CAEhC2kB,kBAFgC,EAGlCA,kBAAkB,CAACyD,2BAAnB,CAA+C,IAA/C,CACH,CA9zBgD,CAm0BjD,KAAKmD,4BAAL,CAAoC,IAAM,CACxChG,mBAAmB,CAAClvB,MAApB,CAA2B,CAA3B,CAA8BkvB,mBAAmB,CAACxhC,MAAlD,CADwC,CAExCwgC,UAAU,CAACiH,yBAAX,CAAqCjG,mBAArC,CACE,KAAKz4B,cADP,IAFwC,CAIxC,KAAK04B,0BAAL,GACD,CAx0BgD,CA60BjD,KAAKgG,yBAAL,CAAiC,MAG3B,KAAKhG,0BAAL,EACFjB,UAAU,CAACkH,0BAAX,IAJ6B,GAK7B,KAAKF,4BAAL,EAL6B,CAOxBhG,mBAPwB,CA70BgB,CA21BjD,KAAKmG,+BAAL,CAAuC,CAACjP,QAAD,CAAWkP,KAAX,GAAqB,CAC1D,GAAI,KAAK5G,cAAT,CAAyB,CACvB,GAAMzG,OAAM,CAAG,GAAI/9B,MAAK,CAACiD,OAAzB,CACAi5B,QAAQ,CAAC8B,OAAT,CAAiBD,MAAjB,CAFuB,CAGvB,GAAIsN,QAAO,CAAGtN,MAAM,CAAC56B,CAAP,CAAWioC,KAAK,CAACE,OAA/B,CACA,GAAMxG,OAAO,CAAC5hC,CAAR,CAAY,KAAKuhC,cAAL,CAAoB/M,KAAjC,CAA0C0T,KAAK,CAACG,OAAjD,EACDH,KAAK,CAACG,OAAN,CAAgBzG,OAAO,CAAC5hC,CADvB,EAEA4hC,OAAO,CAAC3hC,CAAR,CAAY,KAAKshC,cAAL,CAAoBtL,MAAjC,CAA2CkS,OAF1C,EAGDA,OAAO,CAAGvG,OAAO,CAAC3hC,CAHrB,CAGyB,IACjBD,EAAC,CAC0B,CADvB,EAAC,CAACkoC,KAAK,CAACG,OAAN,CAAgBzG,OAAO,CAAC5hC,CAAzB,EACP,KAAKuhC,cAAL,CAAoB/M,KADd,EAC8B,CAFjB,CAGjBv0B,CAAC,CAC2B,CADxB,EAAC,CAACkoC,OAAO,CAAGvG,OAAO,CAAC3hC,CAAnB,EACP,KAAKshC,cAAL,CAAoBtL,MADd,EAC+B,CAJlB,CAKrB,MAAO,CAAC,EAAKj2B,CAAN,CAAS,EAAKC,CAAd,CACV,CACF,CAEF,CA52BgD,CAk3BjD,KAAKqoC,4BAAL,CAAoC,CAACtoC,CAAD,CAAIC,CAAJ,GAC9B4gC,OAD8B,CAEzBA,OAAO,CAAC0H,qBAAR,CAA8BvoC,CAA9B,CAAiCC,CAAjC,CAFyB,OAl3Ba,CAw3BjD,KAAKigC,QAAL,CAAgB,IACPS,UAAU,CAACT,QAAX,EAz3BwC,CAg4BjD,KAAKb,QAAL,CAAgB,IAAM,CACpByB,UAAU,CAACyF,KAAX,IADoB,CAEpB3F,WAAW,CAAC4H,cAAZ,CAA6B,CAFT,CAGhBtH,kBAHgB,EAIlBA,kBAAkB,CAACyD,2BAAnB,CAA+C,IAA/C,CACH,CAr4BgD,CA04BjD,KAAK8D,oBAAL,CAA4B,CAACn2B,GAAD,CAAM7M,IAAN,GAAe,CACzC+O,QAAQ,WAAR,CAAuBlC,GAAvB,EAA8Bo2B,2BAA2B,CAACjjC,IAAD,CAC1D,CA54BgD,CAi5BjD,KAAKkjC,cAAL,CAAsBr2B,GAAG,EAChBkC,QAAQ,CAAClC,GAAD,CAl5BgC,CAw5BjD,KAAKs2B,WAAL,CAAmB,IACVp0B,QAz5BwC,CA+5BjD,KAAKq0B,cAAL,CAAsB,CAACv2B,GAAD,CAAMoB,KAAN,GAAgB,CACpCc,QAAQ,CAAClC,GAAD,CAAR,CAAgBoB,KACjB,CAj6BgD,CAs6BjD,KAAKo1B,iBAAL,CAAyBx2B,GAAG,EAAI,CAC9B,MAAOkC,SAAQ,CAAClC,GAAD,CAChB,CAx6BgD,CA66BjD,KAAKy2B,aAAL,CAAqB,IAAM,CACzBv0B,QAAQ,CAAG8rB,eAAe,EAC3B,CA/6BgD,CAo7BjD,KAAK0I,aAAL,CAAqB,IAAM,CACzB,KAAKjmC,WAAL,CAAiB29B,eAAjB,CACD,CAt7BgD,CAw7BjD;AACA;AAz7BiD,GA07B3CuI,8BAA6B,CAAGjnC,QAAQ,EACrC,CACL,IAAIA,QAAQ,CAACknC,KAAT,CAAiB,WAAIlnC,QAAQ,CAACknC,KAAb,UAAjB,CAA8C,EAAlD,CADK,CAEL,IAAIlnC,QAAQ,CAACmnC,MAAT,CAAkB,WAAInnC,QAAQ,CAACmnC,MAAb,WAAlB,CAAiD,EAArD,CAFK,CAGL,IAAInnC,QAAQ,CAAConC,KAAT,CAAiB,WAAIpnC,QAAQ,CAAConC,KAAb,UAAjB,CAA8C,EAAlD,CAHK,CAIL,IAAIpnC,QAAQ,CAACqnC,IAAT,CAAgB,WAAIrnC,QAAQ,CAACqnC,IAAb,SAAhB,CAA2C,EAA/C,CAJK,CAKL,IAAIrnC,QAAQ,CAACsnC,KAAT,CAAiB,WAAItnC,QAAQ,CAACsnC,KAAb,UAAjB,CAA8C,EAAlD,CALK,CAML,IAAItnC,QAAQ,CAACunC,IAAT,CAAgB,WAAIvnC,QAAQ,CAACunC,IAAb,SAAhB,CAA2C,EAA/C,CANK,CAOL,IAAIvnC,QAAQ,CAACwnC,IAAT,CAAgB,WAAIxnC,QAAQ,CAACwnC,IAAb,SAAhB,CAA2C,EAA/C,CAPK,EAQL/rB,IARK,CAQA,GARA,CA37BwC,CAw8B3CirB,2BAA2B,CAAG1mC,QAAQ,EACnCA,QAAQ,CAACknC,KAAT,CAAkC,OAAjB,CAAAlnC,QAAQ,CAACknC,KAA1B,CAAgD,EACrDlnC,QAAQ,CAACmnC,MAD4C,CACjB,MAAlB,CAAAnnC,QAAQ,CAACmnC,MAD0B,CACJ,EACjDnnC,QAAQ,CAAConC,KADwC,CACf,MAAjB,CAAApnC,QAAQ,CAAConC,KADuB,CACH,EAC9CpnC,QAAQ,CAACqnC,IADqC,CACd,KAAhB,CAAArnC,QAAQ,CAACqnC,IADqB,CACH,EAC3CrnC,QAAQ,CAACsnC,KADkC,CACT,IAAjB,CAAAtnC,QAAQ,CAACsnC,KADiB,CACC,EAC5CtnC,QAAQ,CAACunC,IADmC,CACZ,GAAhB,CAAAvnC,QAAQ,CAACunC,IADmB,CACJ,EACxCvnC,QAAQ,CAACwnC,IAD+B,CACR,GAAhB,CAAAxnC,QAAQ,CAACwnC,IADe,CACD,CA/8BM,CAs8BjD;AACA;AAWA;AACA;AACA;AAQA;AACA;AACA;AAMA;;;;;;;;KAp+BiD,CAk/BjD;;;;KA7BA,KAAKC,qBAAL,CAA6BznC,QAAQ,EAAI,IACjC0nC,OAAM,CAAGT,6BAA6B,CAACjnC,QAAD,CADL,CAEjC2nC,QAAQ,CAAGjB,2BAA2B,CAAC1mC,QAAD,CAFL,CAGvC,KAAK6mC,cAAL,CAAoB,UAApB,CAAgCa,MAAhC,CAHuC,CAIvC,KAAK3mC,WAAL,CAAiB4mC,QAAjB,CACD,CA19BgD,CA+9BjD,KAAKC,6BAAL,CAAqC5nC,QAAQ,EAAI,CAC/C,GAAM0nC,OAAM,CAAGT,6BAA6B,CAACjnC,QAAD,CAA5C,CACA,KAAK6mC,cAAL,CAAoB,kBAApB,CAAwCa,MAAxC,CACD,CAl+BgD,CA6+BjD,KAAKG,UAAL,CAAmBC,MAAD,EAAY,CAC5B,GAAMC,SAAQ,CAAG,GAAI1J,cAAJ,CAAkB,IAAlB,CAAjB,CACA,MAAO0J,SAAQ,CAACF,UAAT,CAAoBC,MAApB,CACR,CAh/BgD,CAu/BjD,KAAKE,aAAL,CAAqB,IACZlJ,UAEV,C;;;;;;GC1hCKhkC,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfyc,UAAU,CAAGzc,mBAAO,CAAC,CAAD,CAAP,CAAuByc,U,CACpCmyB,SAAS,CAAG5uC,mBAAO,CAAC,EAAD,CAAP,CAA+B4uC,S,CAC3CC,SAAS,CAAG7uC,mBAAO,CAAC,EAAD,CAAP,CAA+B6uC,S,CAC3CC,gBAAgB,CAAG9uC,mBAAO,CAAC,EAAD,CAAP,CAAsC8uC,gB,CAEzDC,YAAY,CAAG,CAACvP,MAAD,CAASwP,SAAT,GAAuB,CAC1C,GAAIC,OAAM,CAAI,GAAIC,IAAJ,CAAQ1P,MAAR,CAAgBwP,SAAhB,CAAD,CAA6BG,IAA1C,CACA;AACA,GAAI3P,MAAM,EAA+B,CAA3B,CAAAA,MAAM,CAAC7S,KAAP,CAAa,GAAb,EAAkB1nB,MAAhC,CAA4C,CAC1C,GAAM2nB,cAAa,CAAGoiB,SAAS,CAACriB,KAAV,CAAgB,GAAhB,CAAtB,CACA;AAC6B,CAAzB,GAAAC,aAAa,CAAC3nB,MAHwB,GAIxCgqC,MAAM,CAAGA,MAAM,CAAG,GAAT,CAAeriB,aAAa,CAAC,CAAD,CAJG,CAM3C,CACD,MAAOqiB,OACR,C,CAED;;;;;;;;GASAttC,OAAO,CAACojC,WAAR,CAAsB,SAAUvE,OAAV,CAAmB,CACvC,GAAMxxB,MAAK,CAAGwxB,OAAd,CACA,KAAK0J,cAAL,CAAsB,CAFiB,CAGvC,KAAKkF,WAAL,CAAmB,EAHoB,IAInCC,WAAU,GAJyB,CAKnCC,aAAa,GALsB,CAMjCC,gBAAgB,CAAG,GAAIT,iBANU,CAavC,KAAKnI,mBAAL,CAA2B,IAAM,IAC3B6I,UAAS,CAAG,CADe,CAE3BC,WAAW,CAAG,CAFa,CAG3BC,YAAY,GAHe,CAK/B,IAAK,GAAMz4B,IAAX,GAAkB,MAAKm4B,WAAvB,CAAoC,CAClC,GAAMO,SAAQ,CAAG,KAAKP,WAAL,CAAiBn4B,GAAjB,CAAjB,CAEAu4B,SAAS,EAAIG,QAAQ,CAAC,CAAD,CAHa,CAIlCF,WAAW,EAAIE,QAAQ,CAAC,CAAD,CAJW,CAMf,CAAf,EAAAA,QAAQ,CAAC,CAAD,CANsB,GAOhCD,YAAY,GAPoB,CAQnC,CAID,MAHIA,aAGJ,GAFEF,SAAS,CAAG,CAEd,EAAO,CAAEA,SAAF,CAAaC,WAAb,CAA0BH,aAA1B,CACR,CA/BsC,CAkCvC,KAAKhjB,UAAL,CAAkBpU,EAAE,EACX03B,GAAG,EAAI,CACZ,KAAKR,WAAL,CAAiBl3B,EAAjB,EAAuB,CAAE03B,GAAG,CAACC,MAAN,CAAcD,GAAG,CAACE,KAAlB,CACxB,CArCoC,CAwCvC,KAAKvjB,OAAL,CAAenG,cAAc,EACpB,IAAO,GACZ,KAAK8jB,cADO,CAEZoF,aAAa,GAFD,CAGRlpB,cAHQ,EAIVA,cAAc,EAEjB,CA/CoC,CAkDvC,GAAI2pB,kBAAiB,CAAG,CAACC,YAAD,CAAeC,KAAf,GAAyB,CAC/C,GAAMpI,YAAW,CAAGoI,KAAK,CAACC,OAA1B,CACA,GAAID,KAAK,CAACE,MAAV,CACGnhC,KAAK,CAAC44B,kBAAN,CAAyBC,WAAzB,CAAsCoI,KAAK,CAACG,OAA5C,CADH,KAEO,IACCC,SAAQ,CAAG,EADZ,gBAEOp5B,GAFP,CAEYoB,KAFZ,EAGC23B,YAHD,GAIDf,MAAM,CAAGF,YAAY,CAAC12B,KAAD,CAAQ23B,YAAR,CAJpB,CAKDK,QAAQ,CAAC5qC,IAAT,CAAc,GAAIm2B,QAAJ,CAAY,CAACC,OAAD,CAAUC,MAAV,GAAqB,CAC7C;AACAwU,KAAK,CAACrB,MAAD,CAAL,CACGsB,IADH,CACQC,QAAQ,EAAIA,QAAQ,CAAC1jB,IAAT,EADpB,EAEGyjB,IAFH,CAEQr3B,IAAI,EAAI2iB,OAAO,CAAC,CAAC5kB,GAAG,CAAEA,GAAN,CAAWiC,IAAI,CAAEA,IAAjB,CAAD,CAFvB,EAGGu3B,KAHH,CAGSv3B,IAAI,EAAI4iB,MAAM,CAAC5iB,IAAD,CAHvB,CAID,CANa,CAAd,CALC,GAEL,IAAK,GAAM,CAACjC,GAAD,CAAMoB,KAAN,CAAX,EAA2BvS,OAAM,CAACgiC,OAAP,CAAemI,KAAK,CAACG,OAArB,CAA3B,OAAYn5B,GAAZ,CAAiBoB,KAAjB,EAYAujB,OAAO,CAAC8U,GAAR,CAAYL,QAAZ,EACCE,IADD,CACMI,MAAM,EAAI,CACd,GAAM7I,QAAO,CAAG,EAAhB,CACA6I,MAAM,CAAC7V,OAAP,CAAe8V,KAAK,EAAI,CACtB9I,OAAO,CAAC8I,KAAK,CAAC35B,GAAP,CAAP,CAAqB25B,KAAK,CAAC13B,IAC5B,CAFD,CAFc,CAKdlK,KAAK,CAAC44B,kBAAN,CAAyBC,WAAzB,CAAsCC,OAAtC,CALc,CAMd,GAAIjC,mBAAkB,CAAG72B,KAAK,CAACI,qBAAN,EAAzB,CACIy2B,kBAPU,EAQZA,kBAAkB,CAACgL,kBAAnB,CAAsChJ,WAAtC,CARY,CASdwH,UAAU,GACX,CAXD,CAYD,CACF,CA/BD,CAiCA;;;KAIA,KAAK9N,WAAL,CAAmB,CAAC7kB,GAAD,CAAM0J,cAAN,GAAyB,CAC1C,KAAK8jB,cAAL,EAAuB,CADmB,CAE1C,GAAM4G,QAAO,CAAG,GAAI7zB,eAApB,CACA6zB,OAAO,CAAC3zB,kBAAR,CAA6B,IAAM,CACjC,GAA0B,CAAtB,EAAA2zB,OAAO,CAAC1zB,UAAZ,CACE,GAAqB,GAAlB,EAAA0zB,OAAO,CAACzzB,MAAX,CAA0B,CACxB,GAAM0zB,SAAQ,CAAGhkB,IAAI,CAAChG,KAAL,CAAW+pB,OAAO,CAACxzB,YAAnB,CAAjB,CACAtO,KAAK,CAAC44B,kBAAN,CAAyB,SAAzB,CAAoC,CAAE,QAAYmJ,QAAd,CAApC,CAFwB,CAGxB/hC,KAAK,CAACgyB,SAAN,EAHwB,CAIxBqO,UAAU,GAJc,CAKxB,EAAE,KAAKnF,cALiB,CAMpB,MAAA9jB,cAAc,EAA2C,UAAzB,QAAOA,eANnB,EAOtBA,cAAc,EACjB,CARD,IASE,MAAKmG,OAAL,EAGL,CAjByC,CAkB1CykB,UAAU,CAAGv0B,UAAU,CAACC,GAAD,CAlBmB,CAmB1Co0B,OAAO,CAAC5zB,IAAR,CAAa,KAAb,CAAoB8zB,UAApB,IAnB0C,CAoB1CF,OAAO,CAACvzB,IAAR,EACD,CA5GsC,CAoHvC,KAAK6jB,aAAL,CAAqB,CAAC75B,MAAD,CAASiW,IAAT,CAAe6jB,OAAf,CAAwBC,SAAxB,CAAmCh7B,WAAnC,CAAgDC,WAAhD,CAA6D6f,cAA7D,GAAgF,CACnG,GAAM6qB,OAAM,CAAGzzB,IAAI,CAACvY,MAApB,CACA,KAAKilC,cAAL,EAAuB+G,MAF4E,CAGnG,IAAK,GAAIlsC,GAAC,CAAG,CAAb,CAAgBA,EAAC,CAAGksC,MAApB,CAA4BlsC,EAAC,EAA7B,CAAiC,IACzBmsC,SAAQ,CAAG1zB,IAAI,CAACzY,EAAD,CADU,CAE3B5B,MAAM,CAAGnD,mBAAO,CAAC,CAAD,CAAP,CAAkBG,oBAFA,CAG3BqC,OAAO,CAAGxC,mBAAO,CAAC,CAAD,CAAP,CAAkBI,cAHD,CAI3BihC,OAAO,MAAP,EAAwBA,OAAO,CAACt8B,EAAD,CAAP,MAJG,GAK7B5B,MAAM,GAAGk+B,OAAO,CAACt8B,EAAD,CALa,EAM3Bu8B,SAAS,MAAT,EAA0BA,SAAS,CAACv8B,EAAD,CAAT,MANC,GAO7BvC,OAAO,CAAG8+B,SAAS,CAACv8B,EAAD,CAPU,EAQ/B,GAAInC,iBAAgB,CAAG,CAAvB,CACI0D,WAAW,MAAX,EAA4BA,WAAW,CAACvB,EAAD,CAAX,MATD,GAU7BnC,gBAAgB,GAAG0D,WAAW,CAACvB,EAAD,CAVD,EAW/B,GAAIlC,iBAAgB,CAAG,CAAvB,CACI0D,WAAW,MAAX,EAA4BA,WAAW,CAACxB,EAAD,CAAX,MAZD,GAa7BlC,gBAAgB,GAAG0D,WAAW,CAACxB,EAAD,CAbD,EAc/BwqC,gBAAgB,CAACtpB,IAAjB,CAAsBxJ,UAAU,CAACy0B,QAAD,CAAhC,CAA4ClqB,UAAU,CAACzf,MAAD,CAASpE,MAAT,CAAiBX,OAAjB,CAA0BI,gBAA1B,CAA4CC,gBAA5C,sBACzCujB,cADyC,CAAtD,CAC8B,KAAKkG,UAAL,CAAgBvnB,EAAhB,CAD9B,CACkD,KAAKwnB,OAAL,CAAanG,cAAb,CADlD,CAED,CACF,CAxIsC,CAkJvC,KAAKob,eAAL,CAAuB,CAAC2P,YAAD,CAAe1P,cAAf,CAA+Brb,cAA/B,GAAkD,CACvE,GAAM0qB,QAAO,CAAG,GAAI7zB,eAApB,CACA6zB,OAAO,CAAC3zB,kBAAR,CAA6B,IAAM,CACjC,GAA0B,CAAtB,EAAA2zB,OAAO,CAAC1zB,UAAR,EAA6C,GAAlB,EAAA0zB,OAAO,CAACzzB,MAAvC,CAAsD,CACpD,GAAM0zB,SAAQ,CAAGhkB,IAAI,CAAChG,KAAL,CAAW+pB,OAAO,CAACxzB,YAAnB,CAAjB,CACAtO,KAAK,CAACu4B,QAAN,CAAewJ,QAAf,CAFoD,CAKpD,OACQG,SADR,CAFM1zB,IAAI,CAAG,EAEb,CAASzY,GAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGgsC,QAAQ,CAACK,iBAA7B,CAAgDrsC,GAAC,EAAjD,CACQmsC,QADR,CADwBzP,cAAc,CAAG,GAEtB,EAAmB18B,GAAC,CAAG,CAAvB,EAA4B,OAD/C,CAEEyY,IAAI,CAAC/X,IAAL,CAAUyrC,QAAV,CAFF,CAIA,KAAK9P,aAAL,CAAmB+P,YAAnB,CAAiC3zB,IAAjC,CAAuCuzB,QAAQ,CAAC5tC,MAAhD,CAAwD4tC,QAAQ,CAACvuC,OAAjE,CAA0EuuC,QAAQ,CAACzqC,WAAnF,CAAgGyqC,QAAQ,CAACxqC,WAAzG,CAAsH6f,cAAtH,CACD,CACF,CAdsE,CAevE4qB,UAAU,CAAGv0B,UAAU,CAACglB,cAAc,CAAG,YAAlB,CAfgD,CAgBvEqP,OAAO,CAAC5zB,IAAR,CAAa,KAAb,CAAoB8zB,UAApB,IAhBuE,CAiBvEF,OAAO,CAACvzB,IAAR,EACD,CApKsC,CAsKvC;AACA,GAAM8zB,YAAW,CAAG,CAAC9pC,MAAD,CAAS3E,gBAAT,CAA2BC,gBAA3B,CAA6CwD,SAA7C,CAAwDiB,YAAxD,CAAsEmB,WAAtE,CAAmF2d,cAAnF,GACX,CAAChkB,QAAD,CAAW6kB,SAAX,GAAyB,IACxBqqB,SAAQ,CAAG,IAAKtxC,mBAAO,CAAC,EAAD,CAAP,CAA8BU,KAAnC,CADa,CAE1B+B,QAAQ,OAFkB,CAG1BwkB,SAAS,EAAIA,SAAS,CAAC,CAAD,CAHI,GAI5BxkB,QAAQ,CAAG,GAAIhB,MAAK,CAACk4B,iBAAV,CAA4B,CAAC12B,KAAK,CAACgkB,SAAS,CAAC,CAAD,CAAT,CAAahkB,KAAb,CAAmBkF,KAAnB,EAAP,CAA5B,CAJiB,CAKxB,EAAM8e,SAAS,CAAC,CAAD,CAAT,CAAazkB,OALK,GAM1BC,QAAQ,CAACW,WAAT,GAN0B,EAQ5BX,QAAQ,CAACD,OAAT,CAAmBykB,SAAS,CAAC,CAAD,CAAT,CAAazkB,OARJ,CAS5BC,QAAQ,CAACE,YAAT,CAAwBC,gBATI,CAU5BH,QAAQ,CAACc,YAAT,CAAwB0jB,SAAS,CAAC,CAAD,CAAT,CAAa1jB,YAVT,EAY9B,GAAIpB,QAAO,CAAG,EAAd,CACAA,OAAO,CAACS,gBAAR,CAA2BA,gBAbG,CAc9BT,OAAO,CAACU,gBAAR,CAA2BA,gBAdG,CAgB1ByuC,QAhB0B,GAiB5BA,QAAQ,CAACvY,iBAAT,CAA2B32B,QAA3B,CAAqCK,QAArC,CAA+CN,OAA/C,CAjB4B,CAkB5BmvC,QAAQ,CAACtnC,OAAT,CAAiB3D,SAAjB,CAlB4B,CAmB5BirC,QAAQ,CAAChqC,YAAT,CAAwBA,YAnBI,CAoB5BgqC,QAAQ,CAACxiC,cAAT,CAA0BrG,WApBE,CAqB5BlB,MAAM,CAAC8hC,aAAP,CAAqBiI,QAArB,CArB4B,CAsB5BA,QAAQ,CAAC5pC,WAAT,CAAqBsH,KAAK,CAACpH,WAAN,EAArB,CAtB4B,EAwB9B,EAAE,KAAKsiC,cAxBuB,CAyB9B9nC,QAAQ,CAACkK,OAAT,EAzB8B,CA0B1B,MAAA8Z,cAAc,EAA2C,UAAzB,QAAOA,eA1Bb,EA2B5BA,cAAc,CAACkrB,QAAD,CACjB,CA7BH,CAgCA;;;;;;;;;;KAWA,KAAK3H,YAAL,CAAoB,CAACpiC,MAAD,CAASmV,GAAT,CAAcpW,WAAd,CAA2BC,WAA3B,CAAwCF,SAAxC,CAAmD+f,cAAnD,CAAmEjkB,OAAnE,GAA+E,CAClG,GAAIS,iBAAgB,CAAG,CAAvB,CACC,KAAKsnC,cAAL,EAAuB,CAF0E,IAG7F7jB,SAAQ,IAAIlkB,OAAO,EAAIA,OAAO,CAACkkB,QAAvB,GAAmClkB,OAAO,CAACkkB,QAH0C,CAI7F/e,YAAY,CAAInF,OAAO,EAAIA,OAAO,CAACmF,YAApB,CAAoCnF,OAAO,CAACmF,YAA5C,OAJ8E,CAK7FmB,WAAW,CAAItG,OAAO,EAAIA,OAAO,CAACsG,WAApB,CAAmCtG,OAAO,CAACsG,WAA3C,OAL+E,CAM9F,MAAAnC,WAN8F,GAOjG1D,gBAAgB,GAAG0D,WAP8E,EAQlG,GAAIzD,iBAAgB,CAAG,CAAvB,CAGC,GAFG,MAAA0D,WAEH,GADA1D,gBAAgB,GAAG0D,WACnB,EAAI8f,QAAJ,CAAc,CACZ,GAAI1K,OAAM,CAAG4zB,gBAAgB,CAACxoB,KAAjB,CAAwBrK,GAAxB,CAAb,CACC20B,WAAW,CAAC9pC,MAAD,CAAS3E,gBAAT,CAA2BC,gBAA3B,CAA6CwD,SAA7C,CAAwDiB,YAAxD,CACVmB,WADU,CACG2d,cADH,CAAZ,CACiCzK,MAAM,CAACvZ,QADxC,CACkDuZ,MAAM,CAACsL,SADzD,CAED,CAJD,IAKEsoB,iBAAgB,CAACtpB,IAAjB,CAAsBvJ,GAAtB,CAA2B20B,WAAW,CAAC9pC,MAAD,CAAS3E,gBAAT,CAA2BC,gBAA3B,CAA6CwD,SAA7C,CACpCiB,YADoC,CACtBmB,WADsB,CACT2d,cADS,CAAtC,CAC8C,KAAKkG,UAAL,CAAgBvnB,CAAhB,CAD9C,CACkE,KAAKwnB,OAAL,CAAanG,cAAb,CADlE,CAGH,CArOsC,IAuOjCmrB,aAAY,CAAG,CAAChqC,MAAD,CAAS2e,YAAT,CAAuBujB,QAAvB,CAAiCpjC,SAAjC,CAA4C+f,cAA5C,CAA4DjkB,OAA5D,GAAwE,IACvFkkB,SAAQ,CAAKlkB,OAAO,EAAIA,OAAO,CAACkkB,QAApB,CAAgClkB,OAAO,CAACkkB,QAAxC,OAD2E,CAEvF/e,YAAY,CAAInF,OAAO,EAAIA,OAAO,CAACmF,YAApB,CAAoCnF,OAAO,CAACmF,YAA5C,OAFwE,CAGvFgf,aAAa,CAAInkB,OAAO,EAAIA,OAAO,CAACmkB,aAApB,CAAqCnkB,OAAO,CAACmkB,aAA7C,OAHuE,CAIvF7d,WAAW,CAAItG,OAAO,EAAIA,OAAO,CAACsG,WAApB,CAAmCtG,OAAO,CAACsG,WAA3C,OAJyE,CAKrF+oC,WAAW,CAAG,IAAKxxC,mBAAO,CAAC,EAAD,CAAP,CAAiCQ,QAAtC,CALuE,CAM3FgxC,WAAW,CAAC9pC,WAAZ,CAAwBsH,KAAK,CAACpH,WAAN,EAAxB,CAN2F,CAO3F4pC,WAAW,CAACnrC,SAAZ,CAAwBA,SAPmE,CAQ3F,GAAIorC,WAAU,CAAG,IAAM,CACrB,EAAE,KAAKvH,cADc,CAEjB9jB,cAAc,MAAd,EAAyD,UAAzB,QAAOA,eAFtB,EAGnBA,cAAc,CAACorB,WAAD,CACjB,CAJD,CAKA,EAAE,KAAKtH,cAboF,CAcvF7jB,QAduF,CAezFmrB,WAAW,CAACvrB,IAAZ,CAAiBC,YAAjB,CAA+BujB,QAA/B,CAAyCgI,UAAzC,CAAqDprB,QAArD,CAA+DC,aAA/D,CAfyF,CAkBzFkrB,WAAW,CAACvrB,IAAZ,CAAiBC,YAAjB,CAA+BzJ,UAAU,CAACgtB,QAAD,CAAzC,CAAqDgI,UAArD,CAAiEprB,QAAjE,CAA2EC,aAA3E,CAlByF,CAoB3FkrB,WAAW,CAAClqC,YAAZ,CAA2BA,YApBgE,CAqB3FkqC,WAAW,CAAC1iC,cAAZ,CAA2BrG,WAA3B,CArB2F,CAsB3FlB,MAAM,CAAC8hC,aAAP,CAAqBmI,WAArB,CACD,CA9PsC,CAiQjCE,mBAAmB,CAAG,CAACnqC,MAAD,CAASupC,OAAT,CAAkBrH,QAAlB,CAA4BpjC,SAA5B,CAAuC+f,cAAvC,CAAuDjkB,OAAvD,GACnB,IAAM,CACX,GAA0B,CAAtB,EAAA2uC,OAAO,CAAC1zB,UAAR,EAA6C,GAAlB,EAAA0zB,OAAO,CAACzzB,MAAvC,CAAsD,CACpD,GAAM6I,aAAY,CAAG6G,IAAI,CAAChG,KAAL,CAAW+pB,OAAO,CAACxzB,YAAnB,CAArB,CACAi0B,YAAY,CAAChqC,MAAD,CAAS2e,YAAT,CAAuBujB,QAAvB,CAAiCpjC,SAAjC,CAA4C+f,cAA5C,CAA4DjkB,OAA5D,CACb,CACF,CAvQoC,CA2QjCwvC,cAAc,CAAG,CAACpqC,MAAD,CAAS3E,gBAAT,CAA2BC,gBAA3B,CAA6CwD,SAA7C,CAAwDiB,YAAxD,CAAsEmB,WAAtE,CAAmF2d,cAAnF,GACd,CAAChkB,QAAD,CAAW6kB,SAAX,GAAyB,IACxB2qB,YAAW,CAAG,IAAK5xC,mBAAO,CAAC,EAAD,CAAP,CAAiCS,QAAtC,CADU,CAE1BgC,QAAQ,CAAG,GAAIhB,MAAK,CAACs1B,cAAV,CAAyB,CAAErV,SAAS,CAAE,EAAb,CAAkBT,IAAI,CAAE,EAAxB,CAA4BY,eAAe,GAA3C,CAAzB,CAFe,CAG1BoF,SAAS,EAAIA,SAAS,CAAC,CAAD,CAHI,GAIxB,EAAMA,SAAS,CAAC,CAAD,CAAT,CAAazkB,OAJK,GAK1BC,QAAQ,CAACW,WAAT,GAL0B,EAO5BX,QAAQ,CAACD,OAAT,CAAmBykB,SAAS,CAAC,CAAD,CAAT,CAAazkB,OAPJ,CAQ5BC,QAAQ,CAACQ,KAAT,CAAiBgkB,SAAS,CAAC,CAAD,CAAT,CAAahkB,KARF,CAS5BR,QAAQ,CAACE,YAAT,CAAwBC,gBATI,CAU5BH,QAAQ,CAACc,YAAT,CAAwB0jB,SAAS,CAAC,CAAD,CAAT,CAAa1jB,YAVT,EAY9B,GAAIpB,QAAO,CAAG,EAAd,CACAA,OAAO,CAACS,gBAAR,CAA2BA,gBAbG,CAc9BT,OAAO,CAACU,gBAAR,CAA2BA,gBAdG,CAe1B+uC,WAf0B,GAgB5BA,WAAW,CAAC5vC,UAAZ,CAAuBI,QAAvB,CAAiCK,QAAjC,CAA2CN,OAA3C,CAhB4B,CAiB5ByvC,WAAW,CAAC5nC,OAAZ,CAAoB3D,SAApB,CAjB4B,CAkB5BkB,MAAM,CAAC8hC,aAAP,CAAqBuI,WAArB,CAlB4B,CAmB5BA,WAAW,CAAClqC,WAAZ,CAAwBsH,KAAK,CAACpH,WAAN,EAAxB,CAnB4B,CAoB5BgqC,WAAW,CAAC9iC,cAAZ,CAA2BrG,WAA3B,CApB4B,EAsB9BrG,QAAQ,CAACkK,OAAT,EAtB8B,CAuB9B,EAAE,KAAK49B,cAvBuB,CAwB1B,MAAA9jB,cAAc,EAA2C,UAAzB,QAAOA,eAxBb,EAyB5BA,cAAc,CAACwrB,WAAD,CACjB,CAtSoC,CAgQvC;AAmDA,KAAKhI,OAAL,CAAe,CAACriC,MAAD,CAASmV,GAAT,CAAcrW,SAAd,CAAyB+f,cAAzB,GAA4C,CACzD,KAAK8jB,cAAL,EAAuB,CADkC,IAEnD/mC,OAAM,CAAGnD,mBAAO,CAAC,CAAD,CAAP,CAAkBG,oBAFwB,CAGnDqC,OAAO,CAAGxC,mBAAO,CAAC,CAAD,CAAP,CAAkBI,cAHuB,CAInDymB,MAAM,CAAG,GAAI+nB,UAJsC,CAKzD/nB,MAAM,CAACK,WAAP,CAAqB,WALoC,CAMzDL,MAAM,CAACZ,IAAP,CAAYxJ,UAAU,CAACC,GAAD,CAAtB,CAA6BsK,UAAU,CAACzf,MAAD,CAASpE,MAAT,CAAiBX,OAAjB,OAC9B6D,SAD8B,eACG+f,cADH,CAAvC,CAED,CA3TsC,CAsUvC,KAAKyjB,OAAL,CAAe,CAACtiC,MAAD,CAASmV,GAAT,CAAcrW,SAAd,CAAyB+f,cAAzB,GAA4C,CACzD,KAAK8jB,cAAL,EAAuB,CADkC,IAEnD/mC,OAAM,CAAGnD,mBAAO,CAAC,CAAD,CAAP,CAAkBG,oBAFwB,CAGnDqC,OAAO,CAAGxC,mBAAO,CAAC,CAAD,CAAP,CAAkBI,cAHuB,CAInDymB,MAAM,CAAG,GAAIgoB,UAJsC,CAKzDhoB,MAAM,CAACK,WAAP,CAAqB,WALoC,CAMzDL,MAAM,CAACZ,IAAP,CAAYxJ,UAAU,CAACC,GAAD,CAAtB,CAA6BsK,UAAU,CAACzf,MAAD,CAASpE,MAAT,CAAiBX,OAAjB,OAC9B6D,SAD8B,eACE+f,cADF,CAAvC,CAED,CA9UsC,CAgVvC;AAhVuC,GAiVjCyrB,UAAS,CAAG,CAChBtqC,MADgB,CAEhBpE,MAFgB,CAGhBX,OAHgB,CAIhBI,gBAJgB,CAKhBC,gBALgB,CAMhBwD,SANgB,CAOhB+f,cAPgB,GASTzK,MAAM,EAAI,CACf,KAAKuuB,cAAL,EADe,CAEfvuB,MAAM,CAACm2B,QAAP,CAAgBC,KAAK,EAAI,CACvB,GAAIA,KAAK,WAAYtwC,MAAK,CAACyC,IAA3B,CAAiC,CAC/B,GAAM8tC,aAAY,CAAGC,qBAAqB,CAACF,KAAD,CAAQnvC,gBAAR,CAA0BC,gBAA1B,CAA1C,CACA0E,MAAM,CAAC8hC,aAAP,CAAqB2I,YAArB,CAF+B,CAG3BA,YAAY,CAAC3vC,KAHc,GAI7B2vC,YAAY,CAAC3vC,KAAb,CAAmBqG,IAAnB,CAA0BrC,SAJG,EAK/B2rC,YAAY,CAAC3rC,SAAb,CAAyBA,SALM,CAM3B,MAAA+f,cAAc,EAA2C,UAAzB,QAAOA,eANZ,EAO7BA,cAAc,CAAC4rB,YAAD,CACjB,CACF,CAVD,CAWD,CAvWoC,CAuXjCE,cAAc,CAAG,CAAC3qC,MAAD,CAASmV,GAAT,CAAcpW,WAAd,CAA2BC,WAA3B,CAAwCF,SAAxC,CAAmD+f,cAAnD,CAAmEjkB,OAAnE,GAA+E,CACpG,KAAK+nC,cAAL,EAAuB,CAD6E,IAE9F/mC,OAAM,CAAGnD,mBAAO,CAAC,CAAD,CAAP,CAAkBG,oBAFmE,CAG9FqC,OAAO,CAAGxC,mBAAO,CAAC,CAAD,CAAP,CAAkBI,cAHkE,CAIhGwC,gBAAgB,CAAG,CAJ6E,CAKhGyjB,QAAQ,IAAIlkB,OAAO,EAAIA,OAAO,CAACkkB,QAAvB,GAAmClkB,OAAO,CAACkkB,QAL6C,CAMhG8rB,UAAU,CAAIhwC,OAAO,EAAIA,OAAO,CAACgwC,UAApB,CAAkChwC,OAAO,CAACgwC,UAA1C,OANmF,CAOhG7qC,YAAY,CAAInF,OAAO,EAAIA,OAAO,CAACmF,YAApB,CAAoCnF,OAAO,CAACmF,YAA5C,OAPiF,CAQhGmB,WAAW,CAAItG,OAAO,EAAIA,OAAO,CAACsG,WAApB,CAAmCtG,OAAO,CAACsG,WAA3C,OARkF,CAShGnC,WAAW,MATqF,GAUlG1D,gBAAgB,GAAG0D,WAV+E,EAWpG,GAAIzD,iBAAgB,CAAG,CAAvB,CACI0D,WAAW,MAZqF,GAalG1D,gBAAgB,GAAG0D,WAb+E,EAcpG,GAAIsgB,OAAM,CAAG0oB,gBAAb,CACA,GAAI4C,UAAU,SAAd,CACE,GAAkB,KAAd,EAAAA,UAAJ,CACEtrB,MAAM,CAAG,GAAI+nB,UADf,KAEO,IAAkB,KAAd,EAAAuD,UAAJ,CAKL,MAJAtrB,OAAM,CAAG,GAAIgoB,UAIb,CAHAhoB,MAAM,CAACK,WAAP,CAAqB,WAGrB,KAFAL,OAAM,CAACZ,IAAP,CAAYvJ,GAAZ,CAAiBm1B,SAAS,CAACtqC,MAAD,CAASpE,MAAT,CAAiBX,OAAjB,CAA0BI,gBAA1B,CACxBC,gBADwB,CACNwD,SADM,CACKiB,YADL,CACmB8e,cADnB,CAA1B,CAC8D,KAAKkG,UAAL,CAAgBvnB,CAAhB,CAD9D,CACkF,KAAKwnB,OADvF,CAEA,CAGJ,GAAIlG,QAAJ,CAAc,CACZ,GAAM1K,OAAM,CAAG4zB,gBAAgB,CAACxoB,KAAjB,CAAwBrK,GAAxB,CAAf,CACFsK,UAAU,CAACzf,MAAD,CAASpE,MAAT,CAAiBX,OAAjB,CAA0BI,gBAA1B,CACNC,gBADM,CACYwD,SADZ,CACuBiB,YADvB,CACqCmB,WADrC,CACkD2d,cADlD,CAAX,CAC+EzK,MAAM,CAACvZ,QADtF,CACgGuZ,MAAM,CAACsL,SADvG,CAEE,CAJD,IAKEJ,OAAM,CAACK,WAAP,CAAqB,WALvB,CAMEqoB,gBAAgB,CAACtpB,IAAjB,CAAsBvJ,GAAtB,CAA2BsK,UAAU,CAACzf,MAAD,CAASpE,MAAT,CAAiBX,OAAjB,CAA0BI,gBAA1B,CACnCC,gBADmC,CACjBwD,SADiB,CACNiB,YADM,CACQmB,WADR,CACqB2d,cADrB,CAArC,CAC2E,KAAKkG,UAAL,CAAgBvnB,CAAhB,CAD3E,CAC+F,KAAKwnB,OAAL,CAAanG,cAAb,CAD/F,CAGH,CA1ZsC,CA8ZjCgsB,kBAAkB,CAAG,SAAUC,kBAAV,CAA8BjsB,cAA9B,CAA8C2jB,oBAA9C,CAAoE,CAC7F,GAAIuI,eAAc,CAAG,CAArB,CACA,MAAOpxB,WAAU,EAAI,CAEnB,KADAoxB,cACA,CAAIpxB,UAAU,EAAK,MAAAkF,cAAf,EAAyE,UAAzB,QAAOA,eAA3D,CAA0F,CACxFA,cAAc,CAAClF,UAAD,CAD0E,CAExF,GAAI2kB,mBAAkB,CAAG72B,KAAK,CAACI,qBAAN,EAAzB,CACIy2B,kBAHoF,EAItFA,kBAAkB,CAACyD,2BAAnB,CAA+Ct6B,KAA/C,CACH,CACGsjC,cAAc,EAAID,kBARH,GASb,KAAAhD,UATa,EAUfrgC,KAAK,CAACiyB,OAAN,EAVe,CAWb,MAAA8I,oBAAoB,EAAiD,UAA/B,QAAOA,qBAXhC,EAYfA,oBAAoB,EAZL,CAcpB,CACF,CA/asC,CA0WvC;;;;;;;;;;;;KAkFA,KAAKL,eAAL,CAAuB,CAACniC,MAAD,CAASmV,GAAT,CAAcpW,WAAd,CAA2BC,WAA3B,CAAwCF,SAAxC,CAAmD+f,cAAnD,CAAmEjkB,OAAnE,GAA+E,CACpG,GAAIS,iBAAgB,CAAG,CAAvB,CACA,KAAKsnC,cAAL,EAAuB,CAF6E,CAGhG5jC,WAAW,MAHqF,GAIlG1D,gBAAgB,GAAG0D,WAJ+E,EAKpG,GAAIzD,iBAAgB,CAAG,CAAvB,CACI0D,WAAW,MANqF,GAOlG1D,gBAAgB,GAAG0D,WAP+E,KAQhG8f,SAAQ,IAAIlkB,OAAO,EAAIA,OAAO,CAACkkB,QAAvB,GAAmClkB,OAAO,CAACkkB,QAR6C,CAShG/e,YAAY,CAAInF,OAAO,EAAIA,OAAO,CAACmF,YAApB,CAAoCnF,OAAO,CAACmF,YAA5C,OATiF,CAUhGmB,WAAW,CAAItG,OAAO,EAAIA,OAAO,CAACsG,WAApB,CAAmCtG,OAAO,CAACsG,WAA3C,OAVkF,CAWpG,GAAI4d,QAAJ,CAAc,CACZ,GAAM1K,OAAM,CAAG4zB,gBAAgB,CAACxoB,KAAjB,CAAwBrK,GAAxB,CAAf,CACCi1B,cAAc,CAACpqC,MAAD,CAAS3E,gBAAT,CAA2BC,gBAA3B,CAA6CwD,SAA7C,CACbiB,YADa,CACCmB,WADD,CACc2d,cADd,CAAf,CAC8CzK,MAAM,CAACvZ,QADrD,CAC+DuZ,MAAM,CAACsL,SADtE,CAED,CAJD,IAKEsoB,iBAAgB,CAACtpB,IAAjB,CAAsBvJ,GAAtB,CAA2Bi1B,cAAc,CAACpqC,MAAD,CAAS3E,gBAAT,CAA2BC,gBAA3B,CACvCwD,SADuC,CAC5BiB,YAD4B,CACdmB,WADc,CACD2d,cADC,CAAzC,CAEE,KAAKkG,UAAL,CAAgBvnB,CAAhB,CAFF,CAEsB,KAAKwnB,OAAL,CAAanG,cAAb,CAFtB,CAIH,CAhdsC,CA4dvC,KAAKmjB,eAAL,CAAuB,CAAChiC,MAAD,CAASiiC,OAAT,CAAkBC,QAAlB,CAA4BpjC,SAA5B,CAAuC+f,cAAvC,CAAuDjkB,OAAvD,GAAmE,CACxF,GAAMkkB,SAAQ,IAAIlkB,OAAO,EAAIA,OAAO,CAACkkB,QAAvB,GAAmClkB,OAAO,CAACkkB,QAAzD,CACA,GAAIA,QAAJ,CACEkrB,YAAY,CAAChqC,MAAD,CAASiiC,OAAT,CAAkBC,QAAlB,CAA4BpjC,SAA5B,CAAuC+f,cAAvC,CAAuDjkB,OAAvD,CADd,KAEO,CACL,GAAM2uC,QAAO,CAAG,GAAI7zB,eAApB,CACA6zB,OAAO,CAAC3zB,kBAAR,CAA6Bu0B,mBAAmB,CAACnqC,MAAD,CAASupC,OAAT,CAAkBrH,QAAlB,CAC9CpjC,SAD8C,CACnC+f,cADmC,CACnBjkB,OADmB,CAF3C,CAIL2uC,OAAO,CAAC5zB,IAAR,CAAa,KAAb,CAAoBT,UAAU,CAAC+sB,OAAD,CAA9B,IAJK,CAKLsH,OAAO,CAACvzB,IAAR,EACD,CACF,CAvesC,CAufvCg1B,eAAe,CAAG,CAChBhrC,MADgB,CAEhBtF,UAFgB,CAGhBkB,MAHgB,CAIhBX,OAJgB,CAKhBI,gBALgB,CAMhBC,gBANgB,CAOhBujB,cAPgB,CAQhBlkB,UARgB,CAShBmE,SATgB,GAUb,IAMGmsC,YAAW,CAAG,IAAKxyC,mBAAO,CAAC,CAAD,CAAP,CAAiCM,QAAtC,CANjB,OAOHkyC,YAAW,CAACxwC,UAAZ,CAAuBC,UAAvB,CAAmCC,UAAnC,CANc,CACNiB,MADM,CACGA,MADH,CAENX,OAFM,CAEIA,OAFJ,CAGNI,gBAHM,CAGaA,gBAHb,CAINC,gBAJM,CAIaA,gBAJb,CAMd,CAPG,CAQC2vC,WAAW,CAACnwC,KARb,EASDmwC,WAAW,CAACxoC,OAAZ,CAAoB3D,SAApB,CATC,CAUGkB,MAVH,EAUWA,MAAM,CAAC8hC,aAAP,CAAqBmJ,WAArB,CAVX,CAWDA,WAAW,CAAC9qC,WAAZ,CAAwBsH,KAAK,CAACpH,WAAN,EAAxB,CAXC,CAYG,MAAAwe,cAAc,EAA2C,UAAzB,QAAOA,eAZ1C,EAaCA,cAAc,CAACosB,WAAD,CAbf,CAcGA,WAAW,CAAC1wC,YAdf,EAeCkN,KAAK,CAACs7B,eAAN,CAAsBkI,WAAW,CAAC1wC,YAAlC,CAfD,CAgBM0wC,WAhBN,QAmBJ,CAphBsC,CAshBvC;AAthBuC,GAuhBjCxrB,WAAU,CAAG,CACjBzf,MADiB,CAEjBpE,MAFiB,CAGjBX,OAHiB,CAIjBI,gBAJiB,CAKjBC,gBALiB,CAMjBwD,SANiB,CAOjBiB,YAPiB,CAQjBmB,WARiB,CASjB2d,cATiB,GAWV,CAAChkB,QAAD,CAAW6kB,SAAX,GAAyB,CAC9B,GAAIxkB,SAAJ,CACIwkB,SAAS,EAAIA,SAAS,CAAC,CAAD,CAFI,GAG5BxkB,QAAQ,CAAGwkB,SAAS,CAAC,CAAD,CAHQ,EAK9B,GAAM+qB,aAAY,CAAGO,eAAe,CAAChrC,MAAD,CAASnF,QAAT,CAAmBe,MAAnB,CAA2BX,OAA3B,CAClCI,gBADkC,CAChBC,gBADgB,QACaJ,QADb,CACuB4D,SADvB,CACkCoC,WADlC,CAApC,CAEAupC,YAAY,CAAC1qC,YAAb,CAA4BA,YAPE,CAQ9B0qC,YAAY,CAACljC,cAAb,CAA4BrG,WAA5B,CAR8B,CAS9B,EAAE,KAAKyhC,cATuB,CAU9B9nC,QAAQ,CAACkK,OAAT,EAV8B,CAW1B,MAAA8Z,cAAc,EAA2C,UAAzB,QAAOA,eAXb,EAY5BA,cAAc,CAAC4rB,YAAD,CACjB,CA/iBoC,CAmjBjCS,aAAa,CAAIC,cAAD,EAAoB,IAClC5iB,MAAK,CAAG,uFAD0B,CAElC,EAAG+d,KAAH,CAAUC,MAAV,CAAkBC,KAAlB,CAAyBC,IAAzB,CAA+BC,KAA/B,CAAsCC,IAAtC,CAA4CC,IAA5C,EACJuE,cAAc,CAACC,KAAf,CAAqB7iB,KAArB,CAHsC,CAIxC,MAAO,CAAC+d,KAAK,CAAEA,KAAR,CAAcC,MAAM,CAAEA,MAAtB,CAA8BC,KAAK,CAAEA,KAArC,CAA4CC,IAAI,CAAEA,IAAlD,CACCC,KAAK,CAAEA,KADR,CACeC,IAAI,CAAEA,IADrB,CAC2BC,IAAI,CAAEA,IADjC,CAER,CAzjBsC,CAkjBvC;AAUA,KAAKyE,YAAL,CAAqBC,IAAD,EAAU,CAC5B,GAAIA,IAAJ,CAAU,CACR;AACA,GAAIA,IAAI,CAAC3N,QAAT,CAAmB,CACjB,GAAMv+B,SAAQ,CAAG8rC,aAAa,CAACI,IAAI,CAAC3N,QAAN,CAA9B,CACAl2B,KAAK,CAACo/B,qBAAN,CAA4BznC,QAA5B,CACD,CACD,GAAIksC,IAAI,CAAC1N,gBAAT,CAA2B,CACzB,GAAMx+B,UAAQ,CAAG8rC,aAAa,CAACI,IAAI,CAAC1N,gBAAN,CAA9B,CACAn2B,KAAK,CAACu/B,6BAAN,CAAoC5nC,SAApC,CACD,CACD,GAAIksC,IAAI,CAACzN,UAAT,CACE,IAAK,GAAMnuB,IAAX,GAAkB47B,KAAI,CAACzN,UAAvB,CAAmC,CACjC,GAAMh7B,KAAI,CAAGqoC,aAAa,CAACI,IAAI,CAACzN,UAAL,CAAgBnuB,GAAhB,CAAD,CAA1B,CACAjI,KAAK,CAACo+B,oBAAN,CAA2Bn2B,GAA3B,CAAgC7M,IAAhC,CACD,CAEJ,CACF,CA9kBsC,CAglBvC;AACA;AAjlBuC,GAklBjC0oC,mBAAkB,CAAG,CAACvrC,MAAD,CAASyoC,YAAT,CAAuB6C,IAAvB,CAA6BE,KAA7B,CAAoC3sB,cAApC,GAAuD,CAChF,GAAIysB,IAAJ,CAAU,IACJ5D,QAAM,OADF,CAEJ5oB,QAAQ,GAFJ,CAGJwsB,IAAI,CAAC3D,GAHD,EAIND,OAAM,CAAG4D,IAAI,CAAC3D,GAJR,CAKFc,YALE,GAMJf,OAAM,CAAGF,YAAY,CAAC8D,IAAI,CAAC3D,GAAN,CAAWc,YAAX,CANjB,GAOG6C,IAAI,CAAC1C,MAPR,GAQNlB,OAAM,CAAG4D,IAAI,CAAC1C,MAAL,CAAYjB,GARf,CASN7oB,QAAQ,GATF,EAWR,GAAIhgB,UAAS,CAAGwsC,IAAI,CAACtK,SAArB,CAXQ,CAYJliC,SAAS,SAAT,EAAyC,EAAd,GAAAA,SAZvB,IAaNA,SAAS,CAAG,UAbN,EAgBR,GAAIlE,QAAO,CAAG,CACZkkB,QAAQ,CAAEA,QADE,CAEZ8rB,UAAU,CAAEU,IAAI,CAACG,UAFL,CAGZ1rC,YAAY,CAAEurC,IAAI,CAACI,YAHP,CAIZC,WAAW,CAAEL,IAAI,CAACK,WAJN,CAKZzqC,WAAW,CAAEsqC,KALD,CAAd,CAQA,OAAQF,IAAI,CAACM,IAAb,EACE,IAAK,UAAL,CACEjB,cAAc,CAAC3qC,MAAD,CAAS0nC,OAAT,CAAiB4D,IAAI,CAACrsB,aAAtB,CAAqCqsB,IAAI,CAACtsB,YAA1C,CAAwDlgB,SAAxD,CAAmE+f,cAAnE,CAAmFjkB,OAAnF,CADhB,CAEE,MACF,IAAK,OAAL,CACE,GAAIixC,eAAJ,CACK/sB,QAFP,CAMI+sB,cAAc,CAAGP,IAAI,CAAC1C,MAAL,CAAYkD,kBANjC,EAGID,cAAc,CAAGP,IAAI,CAACQ,kBAH1B,CAIID,cAAc,CAAGrE,YAAY,CAAC8D,IAAI,CAACQ,kBAAN,CAA0BrD,YAA1B,CAJjC,EAQM6C,IAAI,CAACS,aARX,GASInxC,OAAO,CAACmkB,aAAR,GATJ,EAWE,KAAKijB,eAAL,CAAqBhiC,MAArB,CAA6B0nC,OAA7B,CAAqCmE,cAArC,CAAqD/sC,SAArD,CAAgE+f,cAAhE,CAAgFjkB,OAAhF,CAXF,CAYE,MACF,IAAK,QAAL,CACE,KAAKunC,eAAL,CAAqBniC,MAArB,CAA6B0nC,OAA7B,CAAqC4D,IAAI,CAACrsB,aAA1C,CAAyDqsB,IAAI,CAACtsB,YAA9D,CAA4ElgB,SAA5E,CAAuF+f,cAAvF,CAAuGjkB,OAAvG,CADF,CAEE,MACF,IAAK,OAAL,CACE,KAAKwnC,YAAL,CAAkBpiC,MAAlB,CAA0B0nC,OAA1B,CAAkC4D,IAAI,CAACrsB,aAAvC,CAAsDqsB,IAAI,CAACtsB,YAA3D,CAAyElgB,SAAzE,CAAoF+f,cAApF,CAAoGjkB,OAApG,CADF,CAEE,MACF,QAvBF,CA0BD,CACF,CAtoBsC,CAyoBjCoxC,uBAAuB,CAAG,CAACvD,YAAD,CAAe6C,IAAf,CAAqBzsB,cAArB,GAAwC,CACtE,GAAIysB,IAAJ,CAAU,IACJ5D,SAAM,OADF,CAEJ5oB,QAAQ,GAFJ,CAWR,OARIwsB,IAAI,CAAC3D,GAQT,EAPED,QAAM,CAAG4D,IAAI,CAAC3D,GAOhB,CANMc,YAMN,GALIf,QAAM,CAAGF,YAAY,CAAC8D,IAAI,CAAC3D,GAAN,CAAWc,YAAX,CAKzB,GAJW6C,IAAI,CAAC1C,MAIhB,GAHElB,QAAM,CAAG4D,IAAI,CAAC1C,MAAL,CAAYjB,GAGvB,CAFE7oB,QAAQ,GAEV,EAAQwsB,IAAI,CAACM,IAAb,EACE,IAAK,MAAL,CACM9sB,QADN,EAEIrX,KAAK,CAAC44B,kBAAN,CAAyB,SAAzB,CAAoC,CAAE,QAAYqH,QAAd,CAApC,CAFJ,CAGII,UAAU,GAHd,CAIQ,MAAAjpB,cAAc,EAA2C,UAAzB,QAAOA,eAJ/C,EAKMA,cAAc,EALpB,EAQI,KAAKmb,WAAL,CAAiB0N,QAAjB,CAAyB7oB,cAAzB,CARJ,CASE,MACF,IAAK,UAAL,CACE,KAAKwsB,YAAL,CAAkBC,IAAlB,CADF,CAEE,MACF,QAdF,CAiBD,CACF,CAvqBsC,CAwoBvC;AAwCA,KAAK7I,QAAL,CAAgB,CAACziC,MAAD,CAASmV,GAAT,CAAc0J,cAAd,CAA8BjkB,OAA9B,GAA0C,CACxD,GAAMqxC,mBAAkB,CAAG,IAAKxzC,mBAAO,CAAC,EAAD,CAAP,CAAwCwzC,kBAA7C,CAA3B,CACAA,kBAAkB,CAACvtB,IAAnB,CAAwBjX,KAAxB,CAA+BzH,MAA/B,CAAuCmV,GAAvC,CAA4C0J,cAA5C,CAA4DjkB,OAA5D,CACD,CAnrBsC,IAqrBnCsxC,YAAW,CAAG,CAACC,aAAD,CAAgB1D,YAAhB,CAA8B2D,OAA9B,CAAuC72B,QAAvC,GAAoD,CAYpE,GAXI62B,OAAO,CAACC,UAWZ,EAVED,OAAO,CAACC,UAAR,CAAmB9Y,OAAnB,CAA2B+Y,SAAS,EAAI,CACtC,GAAId,MAAK,CAAG,CAAZ,CACIc,SAAS,CAACC,KAFwB,GAGpCf,KAAK,CAAGc,SAAS,CAACC,KAHkB,EAItChB,kBAAkB,CAACY,aAAD,CAAgB1D,YAAhB,CAA8B6D,SAA9B,CAAyCd,KAAzC,CAAgDj2B,QAAhD,CACnB,CALD,CAUF,CAHI62B,OAAO,CAACI,cAGZ,EAFEL,aAAa,CAACnwB,iBAAd,CAAgCowB,OAAO,CAACI,cAAxC,CAEF,CAAIJ,OAAO,CAACK,QAAZ,CACE,IAAK,GAAM,CAACC,UAAD,CAAa57B,KAAb,CAAX,EAAkCvS,OAAM,CAACgiC,OAAP,CAAe6L,OAAO,CAACK,QAAvB,CAAlC,CAAoE,CAClE,GAAME,YAAW,CAAGR,aAAa,CAACS,yBAAd,CAAwCF,UAAxC,CAApB,CACIC,WAF8D,EAGhET,WAAW,CAACS,WAAD,CAAclE,YAAd,CAA4B33B,KAA5B,CAAmCyE,QAAnC,CAEd,CAEJ,CAzsBsC,CA2sBnCs3B,2BAA2B,CAAG,CAACnnC,KAAD,CAAQonC,YAAR,GAAyB,CACzD,GAAI5/B,KAAK,CAAC8H,OAAN,CAActP,KAAd,CAAJ,CAA0B,CAExB,OADIF,MAAK,CAAG,CACZ,CAAShI,GAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGkI,KAAK,CAAChI,MAA1B,CAAkCF,GAAC,EAAnC,CACMkI,KAAK,CAAClI,GAAD,CAAL,CAASouC,IAAT,GACDkB,YAAY,EAAsB,MAAlB,GAAApnC,KAAK,CAAClI,GAAD,CAAL,CAASouC,IAA1B,EACkB,UAAlB,GAAAlmC,KAAK,CAAClI,GAAD,CAAL,CAASouC,IADT,EAEkB,OAAlB,GAAAlmC,KAAK,CAAClI,GAAD,CAAL,CAASouC,IAFT,EAGkB,QAAlB,GAAAlmC,KAAK,CAAClI,GAAD,CAAL,CAASouC,IAHT,EAIkB,OAAlB,GAAAlmC,KAAK,CAAClI,GAAD,CAAL,CAASouC,IALP,CADN,EAQIpmC,KAAK,EART,CAWA,MAAOA,MACR,CACD,MAAO,EACR,CA5tBsC,CA8tBnCunC,2BAA2B,CAAIC,UAAD,EAAgB,CAChD,GAAIC,OAAM,CAAGD,UAAU,CAACX,UAAX,CACXQ,2BAA2B,CAACG,UAAU,CAACX,UAAZ,IADhB,CACiD,CAD9D,CAOA,MALIW,WAAU,CAACP,QAKf,EAJEluC,MAAM,CAAC6qC,MAAP,CAAc4D,UAAU,CAACP,QAAzB,EAAmClZ,OAAnC,CAA2CoZ,WAAW,EAAI,CACxDM,MAAM,EAAIF,2BAA2B,CAACJ,WAAD,CACtC,CAFD,CAIF,CAAOM,MACR,CAvuBsC,CAyuBnCC,kBAAkB,CAAIt7B,QAAD,EAAc,CACrC,GAAI1E,KAAK,CAAC8H,OAAN,CAAcpD,QAAd,CAAJ,CACE,MAAOi7B,4BAA2B,CAACj7B,QAAD,IAAlC,CAFmC,MAGJ,QAAtB,EAAC,MAAOA,SAAR,EAA+C,IAAb,GAAAA,QAHR,EAIV,KAArB,GAAAA,QAAQ,CAACu7B,OAJsB,CAK1BJ,2BAA2B,CAACn7B,QAAQ,CAACw7B,OAAV,CALD,OAQtC,CAjvBsC,CAmvBnCC,wBAAwB,CAAG,CAACrtC,MAAD,CAASyoC,YAAT,CAAuB6C,IAAvB,CAA6BE,KAA7B,CAAoCj2B,QAApC,GAAiD,CAC9E,GAAIq0B,aAAY,CAAG5pC,MAAnB,CAIA;AAHIsrC,IAAI,CAACgC,UAAL,EAAuC,EAApB,GAAAhC,IAAI,CAACgC,UAFkD,GAG5E1D,YAAY,CAAG5pC,MAAM,CAAC4sC,yBAAP,CAAiCtB,IAAI,CAACgC,UAAtC,CAH6D,EAM9E/B,kBAAkB,CAAC3B,YAAD,CAAenB,YAAf,CAA6B6C,IAA7B,CAA2C,CAAR,CAAAE,KAAnC,CAA8Cj2B,QAA9C,CACnB,CA1vBsC,CA4vBnCg4B,cAAc,CAAG,CAAC3D,YAAD,CAAeh4B,QAAf,CAAyB62B,YAAzB,CAAuC5pB,cAAvC,CAAuD2jB,oBAAvD,GAAgF,CAInG;AACA,OAJIgL,gBAAe,CAAGN,kBAAkB,CAACt7B,QAAD,CAIxC,CAFI2D,QAAQ,CAAG,GAAIs1B,mBAAJ,CAAuB2C,eAAvB,CAAwC3uB,cAAxC,CAAwD2jB,oBAAxD,CAEf,CAAShlC,GAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGoU,QAAQ,CAAClU,MAA7B,CAAqCF,GAAC,EAAtC,CACEwuC,uBAAuB,CAACvD,YAAD,CAAe72B,QAAQ,CAACpU,GAAD,CAAvB,CAA4B+X,QAA5B,CAAvB,CACF,IAAK,GAAI/X,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGoU,QAAQ,CAAClU,MAA7B,CAAqCF,GAAC,EAAtC,CACE6vC,wBAAwB,CAACzD,YAAD,CAAenB,YAAf,CAA6B72B,QAAQ,CAACpU,GAAD,CAArC,CAA0CA,GAA1C,CAA6C+X,QAA7C,CAE3B,CAtwBsC,CAwwBnCk4B,cAAc,CAAG,CAAC7D,YAAD,CAAeh4B,QAAf,CAAyB62B,YAAzB,CAAuC5pB,cAAvC,CAAuD2jB,oBAAvD,GAAgF,IAC/FgL,gBAAe,CAAGN,kBAAkB,CAACt7B,QAAD,CAD2D,CAG/F2D,QAAQ,CAAG,GAAIs1B,mBAAJ,CAAuB2C,eAAvB,CAAwC3uB,cAAxC,CAAwD2jB,oBAAxD,CAHoF,CAEnG;AAEI5wB,QAAQ,CAAC87B,QAJsF,EAKjG,KAAKrC,YAAL,CAAkBz5B,QAAQ,CAAC87B,QAA3B,CALiG,CAM/F97B,QAAQ,CAAC+7B,KANsF,EAOjGnF,iBAAiB,CAACC,YAAD,CAAe72B,QAAQ,CAAC+7B,KAAxB,CAA+BlF,YAA/B,CAPgF,CAQ/F72B,QAAQ,CAACw7B,OARsF,EASjGlB,WAAW,CAACtC,YAAD,CAAenB,YAAf,CAA6B72B,QAAQ,CAACw7B,OAAtC,CAA+C73B,QAA/C,CACd,CAlxBsC,CAoxBvC;;;;;;;MAQA,KAAKgtB,eAAL,CAAuB,CAACqH,YAAD,CAAez0B,GAAf,CAAoB0J,cAApB,CAAoC2jB,oBAApC,GAA6D,IAC5E+G,QAAO,CAAG,GAAI7zB,eAD8D,CAE9E+zB,UAAU,CAAGv0B,UAAU,CAACC,GAAD,CAFuD,CAGlFo0B,OAAO,CAAC3zB,kBAAR,CAA6B,IAAM,CACjC,GAA0B,CAAtB,EAAA2zB,OAAO,CAAC1zB,UAAR,EAA6C,GAAlB,EAAA0zB,OAAO,CAACzzB,MAAvC,CAAsD,CACpDrO,KAAK,CAAC0+B,aAAN,EADoD,CAEpD1+B,KAAK,CAAC2+B,aAAN,EAFoD,CAGpD0B,UAAU,GAH0C,CAIpD,GAAIW,aAAY,CAAGc,OAAO,CAACqE,WAA3B,CACInF,YAAY,SALoC,GAMlDA,YAAY,CAAI,GAAId,IAAJ,CAAQ8B,UAAR,CAAD,CAAsB7B,IANa,EAOpD,GAAMh2B,SAAQ,CAAG4T,IAAI,CAAChG,KAAL,CAAW+pB,OAAO,CAACxzB,YAAnB,CAAjB,CACI7I,KAAK,CAAC8H,OAAN,CAAcpD,QAAd,CARgD,CASlD27B,cAAc,CAAC3D,YAAD,CAAeh4B,QAAf,CAAyB62B,YAAzB,CAAuC5pB,cAAvC,CAAuD2jB,oBAAvD,CAToC,CAUrB,QAApB,QAAO5wB,SAAP,EAA6C,IAAb,GAAAA,QAVS,EAW1B,KAApB,EAAAA,QAAQ,CAACu7B,OAXqC,EAYhDM,cAAc,CAAC7D,YAAD,CAAeh4B,QAAf,CAAyB62B,YAAzB,CAAuC5pB,cAAvC,CAAuD2jB,oBAAvD,CAGnB,CACF,CApBiF,CAsBlF+G,OAAO,CAAC5zB,IAAR,CAAa,KAAb,CAAoB8zB,UAApB,IAtBkF,CAuBlFF,OAAO,CAACvzB,IAAR,EACD,CACF,C;;;;;;;ACj1BD;AAAA;AAAA;AAAA;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDA,KAAMqxB,UAAN,QAAwBhjB,6CAAO,CAE9B7a,WAAW,CAAEmb,OAAF,CAAY,CAEtB,MAAOA,OAAP,CAEA,CAEDjG,IAAI,CAAEvJ,GAAF,CAAO2P,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,IAElC1Z,MAAK,CAAG,IAF0B,CAIlCgU,MAAM,CAAG,GAAIkF,iDAAJ,CAAgB,KAAKG,OAArB,CAJyB,CAKxCrF,MAAM,CAACuuB,OAAP,CAAgB,KAAKnkB,IAArB,CALwC,CAMxCpK,MAAM,CAACwuB,eAAP,CAAwB,aAAxB,CANwC,CAOxCxuB,MAAM,CAACyuB,gBAAP,CAAyB,KAAKC,aAA9B,CAPwC,CAQxC1uB,MAAM,CAACgG,kBAAP,CAA2B,KAAKV,eAAhC,CARwC,CAUxCtF,MAAM,CAACZ,IAAP,CAAavJ,GAAb,CAAkB,SAAWgB,IAAX,CAAkB,CAEnC,GAAI,CAEH2O,MAAM,CAAExZ,KAAK,CAACkU,KAAN,CAAarJ,IAAb,CAAF,CAEN,CAAC,MAAQ83B,CAAR,CAAY,CAERjpB,OAFQ,CAIZA,OAAO,CAAEipB,CAAF,CAJK,CAQZriC,OAAO,CAACC,KAAR,CAAeoiC,CAAf,CARY,CAYb3iC,KAAK,CAACqZ,OAAN,CAAcupB,SAAd,CAAyB/4B,GAAzB,CAEA,CAED,CAtBD,CAsBG4P,UAtBH,CAsBeC,OAtBf,CAwBA,CAEDxF,KAAK,CAAE7N,IAAF,CAAS,CAyCb,QAASw8B,gBAAT,CAA0BC,KAA1B,CAAiCC,MAAjC,CAAyCnxC,MAAzC,CAAkD,CAEjD;AAEA,IAAM,GAAIM,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAGskC,KAAK,CAAC1wC,MAA5B,CAAoCF,CAAC,CAAGsM,EAAxC,CAA4CtM,CAAC,EAA7C,CAEC,GAAK4wC,KAAK,CAAE5wC,CAAF,CAAL,GAAe6wC,MAAM,CAACC,QAAP,CAAiBpxC,MAAM,CAAGM,CAA1B,IAApB,CAA2D,SAI5D,QAEA,CAqOD;AAEA,GAAM+wC,QAAO,CAvBb,SAAuB/6B,MAAvB,CAAgC,CAE/B,GAAuB,QAAlB,QAAOA,OAAZ,CAAkC,CAGjC,OADMg7B,aAAY,CAAG,GAAI31B,WAAJ,CAAgBrF,MAAM,CAAC9V,MAAvB,CACrB,CAAUF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGgW,MAAM,CAAC9V,MAA5B,CAAoCF,CAAC,EAArC,CAECgxC,YAAY,CAAEhxC,CAAF,CAAZ,CAA6C,GAAzB,CAAAgW,MAAM,CAACi7B,UAAP,CAAmBjxC,CAAnB,CAApB,CAAmD;AAIpD,MAAOgxC,aAAY,CAACh7B,MAAb,EAAuBg7B,YAE9B,CAEA,MAAOh7B,OAIR,CAIe,CAAc7B,IAAd,CAAhB,CAEA,MA5RA,UAAmBA,IAAnB,CAA0B,IAEnB08B,OAAM,CAAG,GAAIK,SAAJ,CAAc/8B,IAAd,CAFU,CAInBg9B,OAAO,CAAGN,MAAM,CAACO,SAAP,CAAkB,EAAlB,IAJS,CAOzB,GAFe,GAAO,GAAK,CAAZ,CAAoBD,OAAO,EAFb,CAAT,KAAK,CAAL,CAAF,CAAoC,CAAjB,EAAW,CAAT,KAAK,CAAL,CAAF,CAAnB,CAA4C,GAAK,CAEzB,CAErC,GAAWN,MAAM,CAACQ,UAAvB,CAEC,SAID;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA,OAFMC,MAAK,CAAG,CAAE,GAAF,CAAO,GAAP,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAEd,CAAUC,GAAG,CAAG,CAAhB,CAAyB,CAAN,CAAAA,GAAnB,CAA4BA,GAAG,EAA/B,CAEC;AAEA,GAAKZ,eAAe,CAAEW,KAAF,CAAST,MAAT,CAAiBU,GAAjB,CAApB,CAA6C,SAI9C;AAEA,QAEA,CAuPM,CAAUR,OAAV,EAvOP,SAAsB58B,IAAtB,CAA6B,CAQ5B;AACA;AAEA,OANIN,EAMJ,CANOC,CAMP,CANUvT,CAMV,CANgC2K,MAMhC,CALIsmC,QAKJ,CALcC,QAKd,CALwBC,QAKxB,CALkChrC,KAKlC,CATMmqC,MAAM,CAAG,GAAIK,SAAJ,CAAc/8B,IAAd,CASf,CARMlU,KAAK,CAAG4wC,MAAM,CAACO,SAAP,CAAkB,EAAlB,IAQd,CANaO,SAAS,GAMtB,CAAUxjC,KAAK,CAAG,CAAlB,CAAqBA,KAAK,CAAG,GAAK,EAAlC,CAAsCA,KAAK,EAA3C,CAE4C,UAApC,EAAA0iC,MAAM,CAACO,SAAP,CAAkBjjC,KAAlB,IAA+C,QAAjD,EAC8B,EAAhC,EAAA0iC,MAAM,CAACC,QAAP,CAAiB3iC,KAAK,CAAG,CAAzB,CAAqC,OADnC,EAE8B,EAAhC,EAAA0iC,MAAM,CAACC,QAAP,CAAiB3iC,KAAK,CAAG,CAAzB,CAAqC,OAJzC,GAMEwjC,SAAS,GANX,CAOEzmC,MAAM,CAAG,GAAIsK,aAAJ,CAA8B,CAAZ,EAAQ,CAAR,CAAAvV,KAAK,CAAvB,CAPX,CASEuxC,QAAQ,CAAGX,MAAM,CAACC,QAAP,CAAiB3iC,KAAK,CAAG,CAAzB,EAA+B,GAT5C,CAUEsjC,QAAQ,CAAGZ,MAAM,CAACC,QAAP,CAAiB3iC,KAAK,CAAG,CAAzB,EAA+B,GAV5C,CAWEujC,QAAQ,CAAGb,MAAM,CAACC,QAAP,CAAiB3iC,KAAK,CAAG,CAAzB,EAA+B,GAX5C,CAYEzH,KAAK,CAAGmqC,MAAM,CAACC,QAAP,CAAiB3iC,KAAK,CAAG,CAAzB,EAA+B,GAZzC,EA0BA,OALM9Q,SAAQ,CAAG,GAAIW,qDAKrB,CAHMoC,QAAQ,CAAG,GAAIoV,aAAJ,CAA8B,CAAZ,EAAQ,CAAR,CAAAvV,KAAK,CAAvB,CAGjB,CAFMkL,OAAO,CAAG,GAAIqK,aAAJ,CAA8B,CAAZ,EAAQ,CAAR,CAAAvV,KAAK,CAAvB,CAEhB,CAAUsM,IAAI,CAAG,CAAjB,CAAoBA,IAAI,CAAGtM,KAA3B,CAAkCsM,IAAI,EAAtC,CAA4C,IAErCiC,MAAK,CAVO,EAUJ,CAAajC,IAAI,EATb,GAAK,CAAL,CAAS,CASI,CAFY,CAGrCqlC,OAAO,CAAGf,MAAM,CAACgB,UAAP,CAAmBrjC,KAAnB,IAH2B,CAIrCsjC,OAAO,CAAGjB,MAAM,CAACgB,UAAP,CAAmBrjC,KAAK,CAAG,CAA3B,IAJ2B,CAKrCujC,OAAO,CAAGlB,MAAM,CAACgB,UAAP,CAAmBrjC,KAAK,CAAG,CAA3B,IAL2B,CAO3C,GAAKmjC,SAAL,CAAiB,CAEhB,GAAMK,YAAW,CAAGnB,MAAM,CAACoB,SAAP,CAAkBzjC,KAAK,CAAG,EAA1B,IAApB,CAEkC,CAA7B,GAAgB,KAAd,CAAAwjC,WAAF,CAJW,EAQfn+B,CAAC,CAAG,CAAgB,EAAd,CAAAm+B,WAAF,EAAyB,EARd,CASfl+B,CAAC,CAAG,CAAyB,EAAvB,CAAEk+B,WAAW,EAAI,CAAnB,EAAkC,EATvB,CAUfzxC,CAAC,CAAG,CAA0B,EAAxB,CAAEyxC,WAAW,EAAI,EAAnB,EAAmC,EAVxB,GAcfn+B,CAAC,CAAG29B,QAdW,CAef19B,CAAC,CAAG29B,QAfW,CAgBflxC,CAAC,CAAGmxC,QAhBW,CAoBhB,CAED,IAAM,GAAI1xC,EAAC,CAAG,CAAd,CAAsB,CAAL,EAAAA,CAAjB,CAAyBA,CAAC,EAA1B,CAAgC,IAEzBkyC,YAAW,CAAG1jC,KAAK,CAAO,EAAJ,CAAAxO,CAFG,CAGzBmyC,YAAY,CAAgB,CAAX,EAAO,CAAP,CAAA5lC,IAAI,CAAN,CAAiC,CAAZ,EAAEvM,CAAC,CAAG,CAAN,CAHX,CAK/BI,QAAQ,CAAE+xC,YAAF,CAAR,CAA2BtB,MAAM,CAACgB,UAAP,CAAmBK,WAAnB,IALI,CAM/B9xC,QAAQ,CAAE+xC,YAAY,CAAG,CAAjB,CAAR,CAA+BtB,MAAM,CAACgB,UAAP,CAAmBK,WAAW,CAAG,CAAjC,IANA,CAO/B9xC,QAAQ,CAAE+xC,YAAY,CAAG,CAAjB,CAAR,CAA+BtB,MAAM,CAACgB,UAAP,CAAmBK,WAAW,CAAG,CAAjC,IAPA,CAS/B/mC,OAAO,CAAEgnC,YAAF,CAAP,CAA0BP,OATK,CAU/BzmC,OAAO,CAAEgnC,YAAY,CAAG,CAAjB,CAAP,CAA8BL,OAVC,CAW/B3mC,OAAO,CAAEgnC,YAAY,CAAG,CAAjB,CAAP,CAA8BJ,OAXC,CAa1BJ,SAb0B,GAe9BzmC,MAAM,CAAEinC,YAAF,CAAN,CAAyBt+B,CAfK,CAgB9B3I,MAAM,CAAEinC,YAAY,CAAG,CAAjB,CAAN,CAA6Br+B,CAhBC,CAiB9B5I,MAAM,CAAEinC,YAAY,CAAG,CAAjB,CAAN,CAA6B5xC,CAjBC,CAqB/B,CAED,CAaD,MAXAlD,SAAQ,CAAC0H,YAAT,CAAuB,UAAvB,CAAmC,GAAI0Q,sDAAJ,CAAqBrV,QAArB,CAA+B,CAA/B,CAAnC,CAWA,CAVA/C,QAAQ,CAAC0H,YAAT,CAAuB,QAAvB,CAAiC,GAAI0Q,sDAAJ,CAAqBtK,OAArB,CAA8B,CAA9B,CAAjC,CAUA,CARKwmC,SAQL,GANCt0C,QAAQ,CAAC0H,YAAT,CAAuB,OAAvB,CAAgC,GAAI0Q,sDAAJ,CAAqBvK,MAArB,CAA6B,CAA7B,CAAhC,CAMD,CALC7N,QAAQ,CAACs0C,SAAT,GAKD,CAJCt0C,QAAQ,CAACqJ,KAAT,CAAiBA,KAIlB,EAAOrJ,QAEP,CA+H4B,CAAa0zC,OAAb,CAAtB,CA7HP,SAAqB58B,IAArB,CAA4B,QAgBvB0E,OAhBuB,CAErBxb,QAAQ,CAAG,GAAIW,qDAFM,CAGrBo0C,YAAY,CAAG,0BAHM,CAIrBC,WAAW,CAAG,0BAJO,CAKvBC,WAAW,CAAG,CALS,CAOrBC,YAAY,CAAG,iDAAiDz9B,MAP3C,CAQrB09B,aAAa,CAAG,GAAIC,OAAJ,CAAY,SAAWF,YAAX,CAA0BA,YAA1B,CAAyCA,YAArD,CAAmE,GAAnE,CARK,CASrBG,aAAa,CAAG,GAAID,OAAJ,CAAY,SAAWF,YAAX,CAA0BA,YAA1B,CAAyCA,YAArD,CAAmE,GAAnE,CATK,CAWrBnyC,QAAQ,CAAG,EAXU,CAYrB+K,OAAO,CAAG,EAZW,CAcrB7G,MAAM,CAAG,GAAIhC,8CAdQ,CAkBvBqwC,UAAU,CAAG,CAlBU,CAmBvBC,WAAW,CAAG,CAnBS,CAoBvBC,SAAS,CAAG,CApBW,CAsBwB,IAA3C,IAAEh6B,MAAM,CAAGu5B,YAAY,CAACU,IAAb,CAAmB3+B,IAAnB,CAAX,CAtBmB,EAsB+B,CAEzDy+B,WAAW,CAAGC,SAF2C,KAIzD,GAAMvB,MAAK,CAAGz4B,MAAM,CAAE,CAAF,CAJqC,CAMN,IAA3C,IAAEA,MAAM,CAAGw5B,WAAW,CAACS,IAAZ,CAAkBxB,KAAlB,CAAX,CANiD,EAMC,QAErDyB,mBAAkB,CAAG,CAFgC,CAGrDC,kBAAkB,CAAG,CAHgC,CAKnDr6B,IAAI,CAAGE,MAAM,CAAE,CAAF,CALsC,CAOL,IAA5C,IAAEA,MAAM,CAAG65B,aAAa,CAACI,IAAd,CAAoBn6B,IAApB,CAAX,CAPiD,EASxDrU,MAAM,CAAC1E,CAAP,CAAWqzC,UAAU,CAAEp6B,MAAM,CAAE,CAAF,CAAR,CATmC,CAUxDvU,MAAM,CAACzE,CAAP,CAAWozC,UAAU,CAAEp6B,MAAM,CAAE,CAAF,CAAR,CAVmC,CAWxDvU,MAAM,CAACgF,CAAP,CAAW2pC,UAAU,CAAEp6B,MAAM,CAAE,CAAF,CAAR,CAXmC,CAYxDm6B,kBAAkB,EAZsC,MAgBL,IAA5C,IAAEn6B,MAAM,CAAG25B,aAAa,CAACM,IAAd,CAAoBn6B,IAApB,CAAX,CAhBiD,EAkBxDvY,QAAQ,CAACM,IAAT,CAAeuyC,UAAU,CAAEp6B,MAAM,CAAE,CAAF,CAAR,CAAzB,CAA0Co6B,UAAU,CAAEp6B,MAAM,CAAE,CAAF,CAAR,CAApD,CAAqEo6B,UAAU,CAAEp6B,MAAM,CAAE,CAAF,CAAR,CAA/E,CAlBwD,CAmBxD1N,OAAO,CAACzK,IAAR,CAAc4D,MAAM,CAAC1E,CAArB,CAAwB0E,MAAM,CAACzE,CAA/B,CAAkCyE,MAAM,CAACgF,CAAzC,CAnBwD,CAoBxDypC,kBAAkB,EApBsC,CAqBxDF,SAAS,EArB+C,CAyBzD;AAE4B,CAAvB,GAAAG,kBA3BoD,EA6BxD5kC,OAAO,CAACC,KAAR,CAAe,yEAA4EikC,WAA3F,CA7BwD,CAmC7B,CAAvB,EAAAS,kBAnCoD,EAqCxD3kC,OAAO,CAACC,KAAR,CAAe,2EAA8EikC,WAA7F,CArCwD,CAyCzDA,WAAW,EAEX,CAjDwD,GAmDnD9jC,MAAK,CAAGokC,WAnD2C,CAoDnD5qC,KAAK,CAAG6qC,SAAS,CAAGD,WApD+B,CAsDzDv1C,QAAQ,CAAC61C,QAAT,CAAmB1kC,KAAnB,CAA0BxG,KAA1B,CAAiC2qC,UAAjC,CAtDyD,CAuDzDA,UAAU,EAEV,CAKD,MAHAt1C,SAAQ,CAAC0H,YAAT,CAAuB,UAAvB,CAAmC,GAAI+Q,6DAAJ,CAA4B1V,QAA5B,CAAsC,CAAtC,CAAnC,CAGA,CAFA/C,QAAQ,CAAC0H,YAAT,CAAuB,QAAvB,CAAiC,GAAI+Q,6DAAJ,CAA4B3K,OAA5B,CAAqC,CAArC,CAAjC,CAEA,CAAO9N,QAEP,CAuCqD,CArCtD,SAAuB2Y,MAAvB,CAAgC,OAER,QAAlB,QAAOA,OAFmB,CAQxBA,MARwB,CAIvB8Q,iDAAW,CAACqsB,UAAZ,CAAwB,GAAI93B,WAAJ,CAAgBrF,MAAhB,CAAxB,CAMR,CA2BiE,CAAc7B,IAAd,CAAZ,CAEtD,CA5U6B,C;;;;;;;AC9D/B;AAAA;AAAA;AAAA;AAgBA;GACMi/B,gBAAe,CAAG,e,CAElBC,yBAAyB,CAAG,U,CAE5BC,qBAAqB,CAAG,U,CAExBC,gBAAgB,CAAG,U,CAEnBC,GAAG,CAAG,GAAIlxC,8C,CACVmxC,GAAG,CAAG,GAAInxC,8C,CACVoxC,GAAG,CAAG,GAAIpxC,8C,CAEVqxC,GAAG,CAAG,GAAIrxC,8C,CACVsxC,GAAG,CAAG,GAAItxC,8C,CAZhB;AAcA,QAASuxC,YAAT,EAAuB,CAEtB,GAAMC,MAAK,CAAG,CACbC,OAAO,CAAE,EADI,CAEbn9B,MAAM,CAAE,EAFK,CAIbxW,QAAQ,CAAE,EAJG,CAKb+K,OAAO,CAAE,EALI,CAMbD,MAAM,CAAE,EANK,CAObE,GAAG,CAAE,EAPQ,CASb8W,SAAS,CAAE,EATE,CAUb8xB,iBAAiB,CAAE,EAVN,CAYbC,WAAW,CAAE,qBAAWtwC,IAAX,CAAiBuwC,eAAjB,CAAmC,CAE/C;AACA;AACA,GAAK,KAAKt9B,MAAL,EAAe,UAAKA,MAAL,CAAYs9B,eAAhC,CAIC,MAFA,MAAKt9B,MAAL,CAAYjT,IAAZ,CAAmBA,IAEnB,MADA,KAAKiT,MAAL,CAAYs9B,eAAZ,CAAgC,KAAAA,eAChC,EAID,GAAMC,iBAAgB,CAAK,KAAKv9B,MAAL,EAAsD,UAAvC,QAAO,MAAKA,MAAL,CAAYw9B,eAAlC,CAAmE,KAAKx9B,MAAL,CAAYw9B,eAAZ,EAAnE,OAA3B,CAyHA;AACA;AACA;AACA;AACA;AAEA,GA7HK,KAAKx9B,MAAL,EAAgD,UAAjC,QAAO,MAAKA,MAAL,CAAYy9B,SA6HvC,EA3HC,KAAKz9B,MAAL,CAAYy9B,SAAZ,IA2HD,CAvHA,KAAKz9B,MAAL,CAAc,CACbjT,IAAI,CAAEA,IAAI,EAAI,EADD,CAEbuwC,eAAe,CAAI,KAAAA,eAFN,CAIb72C,QAAQ,CAAE,CACT+C,QAAQ,CAAE,EADD,CAET+K,OAAO,CAAE,EAFA,CAGTD,MAAM,CAAE,EAHC,CAITE,GAAG,CAAE,EAJI,CAKTkpC,YAAY,GALH,CAJG,CAWbpyB,SAAS,CAAE,EAXE,CAYbqyB,MAAM,GAZO,CAcbC,aAAa,CAAE,uBAAW7wC,IAAX,CAAiB8wC,SAAjB,CAA6B,CAE3C,GAAMC,SAAQ,CAAG,KAAKL,SAAL,IAAjB,CAEA;AACA;AACKK,QAAQ,GAAMA,QAAQ,CAACC,SAAT,EAA6C,CAAvB,EAAAD,QAAQ,CAAC/B,UAArC,CAN8B,EAQ1C,KAAKzwB,SAAL,CAAe1P,MAAf,CAAuBkiC,QAAQ,CAACvmC,KAAhC,CAAuC,CAAvC,CAR0C,CAY3C,GAAMzQ,SAAQ,CAAG,CAChByQ,KAAK,CAAE,KAAK+T,SAAL,CAAehiB,MADN,CAEhByD,IAAI,CAAEA,IAAI,EAAI,EAFE,CAGhBixC,MAAM,CAAIllC,KAAK,CAAC8H,OAAN,CAAei9B,SAAf,GAAiD,CAAnB,CAAAA,SAAS,CAACv0C,MAAxC,CAAqDu0C,SAAS,CAAEA,SAAS,CAACv0C,MAAV,CAAmB,CAArB,CAA9D,CAAyF,EAHnF,CAIhBq0C,MAAM,CAAI,SAAAG,QAAQ,CAAmC,KAAKH,MAAxC,CAAiBG,QAAQ,CAACH,MAJ5B,CAKhBM,UAAU,CAAI,SAAAH,QAAQ,CAAqC,CAArC,CAAiBA,QAAQ,CAACI,QALhC,CAMhBA,QAAQ,CAAE,CAAE,CANI,CAOhBnC,UAAU,CAAE,CAAE,CAPE,CAQhBgC,SAAS,GARO,CAUhBvxC,KAAK,CAAE,eAAW+K,KAAX,CAAmB,CAEzB,GAAM4mC,OAAM,CAAG,CACd5mC,KAAK,CAAqB,QAAjB,QAAOA,MAAP,CAA4BA,KAA5B,CAAoC,KAAKA,KADpC,CAEdxK,IAAI,CAAE,KAAKA,IAFG,CAGdixC,MAAM,CAAE,KAAKA,MAHC,CAIdL,MAAM,CAAE,KAAKA,MAJC,CAKdM,UAAU,CAAE,CALE,CAMdC,QAAQ,CAAE,CAAE,CANE,CAOdnC,UAAU,CAAE,CAAE,CAPA,CAQdgC,SAAS,GARK,CAAf,CAWA,MADAI,OAAM,CAAC3xC,KAAP,CAAe,KAAKA,KAAL,CAAW4xC,IAAX,CAAiBD,MAAjB,CACf,CAAOA,MAEP,CAzBe,CAAjB,CA8BA,MAFA,MAAK7yB,SAAL,CAAexhB,IAAf,CAAqBhD,QAArB,CAEA,CAAOA,QAEP,CA1DY,CA4Db02C,eAAe,CAAE,0BAAY,OAEC,EAAxB,MAAKlyB,SAAL,CAAehiB,MAFQ,CAIpB,KAAKgiB,SAAL,CAAgB,KAAKA,SAAL,CAAehiB,MAAf,CAAwB,CAAxC,CAJoB,OAU5B,CAtEY,CAwEbm0C,SAAS,CAAE,mBAAWthB,GAAX,CAAiB,CAE3B,GAAMkiB,kBAAiB,CAAG,KAAKb,eAAL,EAA1B,CASA;AACA,GATKa,iBAAiB,EAAmC,CAAE,CAAjC,GAAAA,iBAAiB,CAACH,QAS5C,GAPCG,iBAAiB,CAACH,QAAlB,CAA6B,KAAKz3C,QAAL,CAAc+C,QAAd,CAAuBF,MAAvB,CAAgC,CAO9D,CANC+0C,iBAAiB,CAACtC,UAAlB,CAA+BsC,iBAAiB,CAACH,QAAlB,CAA6BG,iBAAiB,CAACJ,UAM/E,CALCI,iBAAiB,CAACN,SAAlB,GAKD,EAAK5hB,GAAG,EAA4B,CAAxB,MAAK7Q,SAAL,CAAehiB,MAA3B,CAEC,IAAM,GAAIg1C,GAAE,CAAG,KAAKhzB,SAAL,CAAehiB,MAAf,CAAwB,CAAvC,CAAgD,CAAN,EAAAg1C,EAA1C,CAAmDA,EAAE,EAArD,CAEyC,CAAnC,OAAKhzB,SAAL,CAAgBgzB,EAAhB,EAAqBvC,UAF3B,EAIE,KAAKzwB,SAAL,CAAe1P,MAAf,CAAuB0iC,EAAvB,CAA2B,CAA3B,CAJF,CAYD;AAUA,MATKniB,IAAG,EAA8B,CAA1B,QAAK7Q,SAAL,CAAehiB,MAS3B,EAPC,KAAKgiB,SAAL,CAAexhB,IAAf,CAAqB,CACpBiD,IAAI,CAAE,EADc,CAEpB4wC,MAAM,CAAE,KAAKA,MAFO,CAArB,CAOD,CAAOU,iBAEP,CA9GY,CAuHd,CAAKd,gBAAgB,EAAIA,gBAAgB,CAACxwC,IAArC,EAA+E,UAAlC,QAAOwwC,iBAAgB,CAAC/wC,KAA1E,CAAiG,CAEhG,GAAM+xC,SAAQ,CAAGhB,gBAAgB,CAAC/wC,KAAjB,CAAwB,CAAxB,CAAjB,CACA+xC,QAAQ,CAACR,SAAT,GAHgG,CAIhG,KAAK/9B,MAAL,CAAYsL,SAAZ,CAAsBxhB,IAAtB,CAA4By0C,QAA5B,CAEA,CAED,KAAKpB,OAAL,CAAarzC,IAAb,CAAmB,KAAKkW,MAAxB,CAEA,CAjKY,CAmKbw+B,QAAQ,CAAE,mBAAY,CAEhB,KAAKx+B,MAAL,EAAgD,UAAjC,QAAO,MAAKA,MAAL,CAAYy9B,SAFlB,EAIpB,KAAKz9B,MAAL,CAAYy9B,SAAZ,IAID,CA3KY,CA6KbgB,gBAAgB,CAAE,0BAAW/hC,KAAX,CAAkBgiC,GAAlB,CAAwB,CAEzC,GAAMnnC,MAAK,CAAGonC,QAAQ,CAAEjiC,KAAF,CAAS,EAAT,CAAtB,CACA,MAAsD,EAA/C,EAAW,CAAT,EAAAnF,KAAK,CAAQA,KAAK,CAAG,CAAhB,CAAoBA,KAAK,CAAGmnC,GAAG,CAAG,CAAzC,CAEP,CAlLY,CAoLbE,gBAAgB,CAAE,0BAAWliC,KAAX,CAAkBgiC,GAAlB,CAAwB,CAEzC,GAAMnnC,MAAK,CAAGonC,QAAQ,CAAEjiC,KAAF,CAAS,EAAT,CAAtB,CACA,MAAsD,EAA/C,EAAW,CAAT,EAAAnF,KAAK,CAAQA,KAAK,CAAG,CAAhB,CAAoBA,KAAK,CAAGmnC,GAAG,CAAG,CAAzC,CAEP,CAzLY,CA2LbG,YAAY,CAAE,sBAAWniC,KAAX,CAAkBgiC,GAAlB,CAAwB,CAErC,GAAMnnC,MAAK,CAAGonC,QAAQ,CAAEjiC,KAAF,CAAS,EAAT,CAAtB,CACA,MAAsD,EAA/C,EAAW,CAAT,EAAAnF,KAAK,CAAQA,KAAK,CAAG,CAAhB,CAAoBA,KAAK,CAAGmnC,GAAG,CAAG,CAAzC,CAEP,CAhMY,CAkMbI,SAAS,CAAE,mBAAWr1C,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAqB,IAEzBqb,IAAG,CAAG,KAAK1b,QAFc,CAGzBu1C,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB+C,QAHF,CAK/Bu1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAAsCyb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAzC,CAL+B,CAM/Bs1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAb,CAAwBub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAA3B,CAAsCub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAzC,CAN+B,CAO/Bo1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAb,CAAwBqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAA3B,CAAsCqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAzC,CAEA,CA3MY,CA6Mbm1C,cAAc,CAAE,wBAAWv1C,CAAX,CAAe,IAExByb,IAAG,CAAG,KAAK1b,QAFa,CAGxBu1C,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB+C,QAHH,CAK9Bu1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAAsCyb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAzC,CAEA,CApNY,CAsNbw1C,aAAa,CAAE,uBAAWx1C,CAAX,CAAe,IAEvByb,IAAG,CAAG,KAAK1b,QAFY,CAGvBu1C,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB+C,QAHJ,CAK7Bu1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAAsCyb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAzC,CAEA,CA7NY,CA+Nby1C,SAAS,CAAE,mBAAWz1C,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAqB,IAEzBqb,IAAG,CAAG,KAAK3Q,OAFc,CAGzBwqC,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB8N,OAHF,CAK/BwqC,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAAsCyb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAzC,CAL+B,CAM/Bs1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAb,CAAwBub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAA3B,CAAsCub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAzC,CAN+B,CAO/Bo1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAb,CAAwBqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAA3B,CAAsCqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAzC,CAEA,CAxOY,CA0Obs1C,aAAa,CAAE,uBAAW11C,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAqB,IAE7Bqb,IAAG,CAAG,KAAK1b,QAFkB,CAG7Bu1C,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB8N,OAHE,CAKnCqoC,GAAG,CAACvrC,SAAJ,CAAe6T,GAAf,CAAoBzb,CAApB,CALmC,CAMnCozC,GAAG,CAACxrC,SAAJ,CAAe6T,GAAf,CAAoBvb,CAApB,CANmC,CAOnCmzC,GAAG,CAACzrC,SAAJ,CAAe6T,GAAf,CAAoBrb,CAApB,CAPmC,CASnCmzC,GAAG,CAACvkC,UAAJ,CAAgBqkC,GAAhB,CAAqBD,GAArB,CATmC,CAUnCE,GAAG,CAACtkC,UAAJ,CAAgBmkC,GAAhB,CAAqBC,GAArB,CAVmC,CAWnCG,GAAG,CAACtkC,KAAJ,CAAWqkC,GAAX,CAXmC,CAanCC,GAAG,CAACnnC,SAAJ,EAbmC,CAenCkpC,GAAG,CAACj1C,IAAJ,CAAUkzC,GAAG,CAACh0C,CAAd,CAAiBg0C,GAAG,CAAC/zC,CAArB,CAAwB+zC,GAAG,CAACtqC,CAA5B,CAfmC,CAgBnCqsC,GAAG,CAACj1C,IAAJ,CAAUkzC,GAAG,CAACh0C,CAAd,CAAiBg0C,GAAG,CAAC/zC,CAArB,CAAwB+zC,GAAG,CAACtqC,CAA5B,CAhBmC,CAiBnCqsC,GAAG,CAACj1C,IAAJ,CAAUkzC,GAAG,CAACh0C,CAAd,CAAiBg0C,GAAG,CAAC/zC,CAArB,CAAwB+zC,GAAG,CAACtqC,CAA5B,CAEA,CA7PY,CA+Pb0sC,QAAQ,CAAE,kBAAW31C,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAqB,IAExBqb,IAAG,CAAG,KAAK5Q,MAFa,CAGxByqC,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB6N,MAHH,CAKzB,SAAA4Q,GAAG,CAAEzb,CAAF,CALsB,EAKAs1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAAsCyb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAzC,CALA,CAMzB,SAAAyb,GAAG,CAAEvb,CAAF,CANsB,EAMAo1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAb,CAAwBub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAA3B,CAAsCub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAzC,CANA,CAOzB,SAAAub,GAAG,CAAErb,CAAF,CAPsB,EAOAk1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAb,CAAwBqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAA3B,CAAsCqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAzC,CAE9B,CAxQY,CA0Qbw1C,KAAK,CAAE,eAAW51C,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAqB,IAErBqb,IAAG,CAAG,KAAK1Q,GAFU,CAGrBuqC,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB+N,GAHN,CAK3BuqC,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAL2B,CAM3Bs1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAAb,CAAwBub,GAAG,CAAEvb,CAAC,CAAG,CAAN,CAA3B,CAN2B,CAO3Bo1C,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAErb,CAAC,CAAG,CAAN,CAAb,CAAwBqb,GAAG,CAAErb,CAAC,CAAG,CAAN,CAA3B,CAEA,CAnRY,CAqRby1C,YAAY,CAAE,uBAAY,CAEzB,GAAMP,IAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB+N,GAAjC,CAEAuqC,GAAG,CAACj1C,IAAJ,CAAU,CAAV,CAAa,CAAb,CAJyB,CAKzBi1C,GAAG,CAACj1C,IAAJ,CAAU,CAAV,CAAa,CAAb,CALyB,CAMzBi1C,GAAG,CAACj1C,IAAJ,CAAU,CAAV,CAAa,CAAb,CAEA,CA7RY,CA+Rby1C,SAAS,CAAE,mBAAW91C,CAAX,CAAe,IAEnByb,IAAG,CAAG,KAAK1Q,GAFQ,CAGnBuqC,GAAG,CAAG,KAAK/+B,MAAL,CAAYvZ,QAAZ,CAAqB+N,GAHR,CAKzBuqC,GAAG,CAACj1C,IAAJ,CAAUob,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAAb,CAAwByb,GAAG,CAAEzb,CAAC,CAAG,CAAN,CAA3B,CAEA,CAtSY,CAwSbuN,OAAO,CAAE,iBAAWvN,CAAX,CAAcE,CAAd,CAAiBE,CAAjB,CAAoB21C,EAApB,CAAwBC,EAAxB,CAA4BC,EAA5B,CAAgCC,EAAhC,CAAoCC,EAApC,CAAwCC,EAAxC,CAA6C,IAE/CC,KAAI,CAAG,KAAKt2C,QAAL,CAAcF,MAF0B,CAIjDy2C,EAAE,CAAG,KAAKtB,gBAAL,CAAuBh1C,CAAvB,CAA0Bq2C,IAA1B,CAJ4C,CAKjDE,EAAE,CAAG,KAAKvB,gBAAL,CAAuB90C,CAAvB,CAA0Bm2C,IAA1B,CAL4C,CAMjDG,EAAE,CAAG,KAAKxB,gBAAL,CAAuB50C,CAAvB,CAA0Bi2C,IAA1B,CAN4C,CAWrD;AAEA,GALA,KAAKhB,SAAL,CAAgBiB,EAAhB,CAAoBC,EAApB,CAAwBC,EAAxB,CAKA,CAJA,KAAKb,QAAL,CAAeW,EAAf,CAAmBC,EAAnB,CAAuBC,EAAvB,CAIA,CAAK,SAAAN,EAAE,EAAyB,EAAP,GAAAA,EAAzB,CAAqC,CAEpC,GAAMO,KAAI,CAAG,KAAK3rC,OAAL,CAAajL,MAA1B,CAEAy2C,EAAE,CAAG,KAAKnB,gBAAL,CAAuBe,EAAvB,CAA2BO,IAA3B,CAJ+B,CAKpCF,EAAE,CAAG,KAAKpB,gBAAL,CAAuBgB,EAAvB,CAA2BM,IAA3B,CAL+B,CAMpCD,EAAE,CAAG,KAAKrB,gBAAL,CAAuBiB,EAAvB,CAA2BK,IAA3B,CAN+B,CAQpC,KAAKhB,SAAL,CAAgBa,EAAhB,CAAoBC,EAApB,CAAwBC,EAAxB,CAEA,CAVD,IAYC,MAAKd,aAAL,CAAoBY,EAApB,CAAwBC,EAAxB,CAA4BC,EAA5B,CAZD,CAgBA;AAEA,GAAK,SAAAT,EAAE,EAAyB,EAAP,GAAAA,EAAzB,CAAqC,CAEpC,GAAMW,MAAK,CAAG,KAAK3rC,GAAL,CAASlL,MAAvB,CAEAy2C,EAAE,CAAG,KAAKlB,YAAL,CAAmBW,EAAnB,CAAuBW,KAAvB,CAJ+B,CAKpCH,EAAE,CAAG,KAAKnB,YAAL,CAAmBY,EAAnB,CAAuBU,KAAvB,CAL+B,CAMpCF,EAAE,CAAG,KAAKpB,YAAL,CAAmBa,EAAnB,CAAuBS,KAAvB,CAN+B,CAQpC,KAAKd,KAAL,CAAYU,EAAZ,CAAgBC,EAAhB,CAAoBC,EAApB,CARoC,CAUpC,KAAKjgC,MAAL,CAAYvZ,QAAZ,CAAqBi3C,YAArB,GAEA,CAZD,IAcC;AAEA,KAAK4B,YAAL,EAID,CA3VY,CA6Vbc,gBAAgB,CAAE,0BAAW52C,QAAX,CAAsB,CAEvC,KAAKwW,MAAL,CAAYvZ,QAAZ,CAAqB4N,IAArB,CAA4B,QAFW,CAMvC,OAEOkD,MAFP,CAFMuoC,IAAI,CAAG,KAAKt2C,QAAL,CAAcF,MAE3B,CAAU+2C,EAAE,CAAG,CAAf,CAAkBrkC,CAAC,CAAGxS,QAAQ,CAACF,MAA/B,CAAuC+2C,EAAE,CAAGrkC,CAA5C,CAA+CqkC,EAAE,EAAjD,CAEO9oC,KAFP,CAEe,KAAKknC,gBAAL,CAAuBj1C,QAAQ,CAAE62C,EAAF,CAA/B,CAAuCP,IAAvC,CAFf,CAIC,KAAKd,cAAL,CAAqBznC,KAArB,CAJD,CAKC,KAAK6nC,QAAL,CAAe7nC,KAAf,CAID,CA5WY,CA8Wb+oC,eAAe,CAAE,yBAAW92C,QAAX,CAAqBgL,GAArB,CAA2B,CAE3C,KAAKwL,MAAL,CAAYvZ,QAAZ,CAAqB4N,IAArB,CAA4B,MAFe,CAO3C,OAHMyrC,KAAI,CAAG,KAAKt2C,QAAL,CAAcF,MAG3B,CAFM62C,KAAK,CAAG,KAAK3rC,GAAL,CAASlL,MAEvB,CAAU+2C,EAAE,CAAG,CAAf,CAAkBrkC,CAAC,CAAGxS,QAAQ,CAACF,MAA/B,CAAuC+2C,EAAE,CAAGrkC,CAA5C,CAA+CqkC,EAAE,EAAjD,CAEC,KAAKpB,aAAL,CAAoB,KAAKR,gBAAL,CAAuBj1C,QAAQ,CAAE62C,EAAF,CAA/B,CAAuCP,IAAvC,CAApB,EAID,IAAM,GAAIS,IAAG,CAAG,CAAV,CAAavkC,EAAC,CAAGxH,GAAG,CAAClL,MAA3B,CAAmCi3C,GAAG,CAAGvkC,EAAzC,CAA4CukC,GAAG,EAA/C,CAEC,KAAKhB,SAAL,CAAgB,KAAKV,YAAL,CAAmBrqC,GAAG,CAAE+rC,GAAF,CAAtB,CAA+BJ,KAA/B,CAAhB,CAID,CAjYY,CAAd,CAuYA,MAFAjD,MAAK,CAACG,WAAN,CAAmB,EAAnB,IAEA,CAAOH,KAEP,CAED;AAEA,KAAMhK,UAAN,QAAwBjjB,6CAAO,CAE9B7a,WAAW,CAAEmb,OAAF,CAAY,CAEtB,MAAOA,OAAP,CAFsB,CAItB,KAAKjF,SAAL,CAAiB,IAEjB,CAEDhB,IAAI,CAAEvJ,GAAF,CAAO2P,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,IAElC1Z,MAAK,CAAG,IAF0B,CAIlCgU,MAAM,CAAG,GAAIkF,iDAAJ,CAAgB,KAAKG,OAArB,CAJyB,CAKxCrF,MAAM,CAACuuB,OAAP,CAAgB,KAAKnkB,IAArB,CALwC,CAMxCpK,MAAM,CAACyuB,gBAAP,CAAyB,KAAKC,aAA9B,CANwC,CAOxC1uB,MAAM,CAACgG,kBAAP,CAA2B,KAAKV,eAAhC,CAPwC,CAQxCtF,MAAM,CAACZ,IAAP,CAAavJ,GAAb,CAAkB,SAAWgB,IAAX,CAAkB,CAEnC,GAAI,CAEH2O,MAAM,CAAExZ,KAAK,CAACkU,KAAN,CAAarJ,IAAb,CAAF,CAEN,CAAC,MAAQ83B,CAAR,CAAY,CAERjpB,OAFQ,CAIZA,OAAO,CAAEipB,CAAF,CAJK,CAQZriC,OAAO,CAACC,KAAR,CAAeoiC,CAAf,CARY,CAYb3iC,KAAK,CAACqZ,OAAN,CAAcupB,SAAd,CAAyB/4B,GAAzB,CAEA,CAED,CAtBD,CAsBG4P,UAtBH,CAsBeC,OAtBf,CAwBA,CAED4vB,YAAY,CAAEl1B,SAAF,CAAc,CAIzB,MAFA,MAAKA,SAAL,CAAiBA,SAEjB,CAAO,IAEP,CAEDF,KAAK,CAAErJ,IAAF,CAAS,CAEb,GAAMm7B,MAAK,CAAG,GAAID,YAAlB,CAEgC,CAAE,CAA7B,GAAAl7B,IAAI,CAAC0+B,OAAL,CAAc,MAAd,CAJQ,GAOZ1+B,IAAI,CAAGA,IAAI,CAACyE,OAAL,CAAc,OAAd,CAAuB,IAAvB,CAPK,EAWmB,CAAE,CAA7B,GAAAzE,IAAI,CAAC0+B,OAAL,CAAc,MAAd,CAXQ,GAcZ1+B,IAAI,CAAGA,IAAI,CAACyE,OAAL,CAAc,OAAd,CAAuB,EAAvB,CAdK,EA0Bb,OARMk6B,MAAK,CAAG3+B,IAAI,CAACiP,KAAL,CAAY,IAAZ,CAQd,CAPIqM,IAAI,CAAG,EAOX,CAPesjB,aAAa,CAAG,EAO/B,CANIC,UAAU,CAAG,CAMjB,CALI3+B,MAAM,CAAG,EAKb,CAFM4+B,QAAQ,CAA4B,UAAvB,QAAO,GAAGA,QAE7B,CAAUz3C,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAG0kC,KAAK,CAACp3C,MAA3B,CAAmCF,CAAC,CAAG4S,CAAvC,CAA0C5S,CAAC,EAA3C,CAQC,GANAi0B,IAAI,CAAGqjB,KAAK,CAAEt3C,CAAF,CAMZ,CAJAi0B,IAAI,CAAGwjB,QAAQ,CAAGxjB,IAAI,CAACwjB,QAAL,EAAH,CAAqBxjB,IAAI,CAACyjB,IAAL,EAIpC,CAFAF,UAAU,CAAGvjB,IAAI,CAAC/zB,MAElB,CAAoB,CAAf,GAAAs3C,UAAL,GAEAD,aAAa,CAAGtjB,IAAI,CAAC0jB,MAAL,CAAa,CAAb,CAFhB,CAKuB,GAAlB,GAAAJ,aALL,EAIA;AAGA,GAAuB,GAAlB,GAAAA,aAAL,CAA6B,CAE5B,GAAMpjC,KAAI,CAAG8f,IAAI,CAACrM,KAAL,CAAY,KAAZ,CAAb,CAEA,OAASzT,IAAI,CAAE,CAAF,CAAb,EAEC,IAAK,GAAL,CACC2/B,KAAK,CAAC1zC,QAAN,CAAeM,IAAf,CACCuyC,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CADX,CAEC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAFX,CAGC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAHX,CADD,CAMqB,CAAf,EAAAA,IAAI,CAACjU,MANX,CAQE4zC,KAAK,CAAC5oC,MAAN,CAAaxK,IAAb,CACCuyC,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CADX,CAEC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAFX,CAGC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAHX,CARF,CAmBE2/B,KAAK,CAAC5oC,MAAN,CAAaxK,IAAb,sBAnBF,CAuBC,MACD,IAAK,IAAL,CACCozC,KAAK,CAAC3oC,OAAN,CAAczK,IAAd,CACCuyC,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CADX,CAEC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAFX,CAGC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAHX,CADD,CAMC,MACD,IAAK,IAAL,CACC2/B,KAAK,CAAC1oC,GAAN,CAAU1K,IAAV,CACCuyC,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CADX,CAEC8+B,UAAU,CAAE9+B,IAAI,CAAE,CAAF,CAAN,CAFX,CADD,CAjCD,CA0CA,CA9CD,IA8CO,IAAuB,GAAlB,GAAAojC,aAAL,CAA6B,CAMnC;AAEA,OAEOrrC,OAFP,CANM0rC,QAAQ,CAAG3jB,IAAI,CAAC4jB,MAAL,CAAa,CAAb,EAAiBH,IAAjB,EAMjB,CALMI,UAAU,CAAGF,QAAQ,CAAChwB,KAAT,CAAgB,KAAhB,CAKnB,CAJMmwB,YAAY,CAAG,EAIrB,CAAUrrC,CAAC,CAAG,CAAd,CAAiBC,EAAE,CAAGmrC,UAAU,CAAC53C,MAAjC,CAAyCwM,CAAC,CAAGC,EAA7C,CAAiDD,CAAC,EAAlD,CAIC,GAFMR,MAEN,CAFe4rC,UAAU,CAAEprC,CAAF,CAEzB,CAAqB,CAAhB,CAAAR,MAAM,CAAChM,MAAZ,CAAyB,CAExB,GAAM83C,YAAW,CAAG9rC,MAAM,CAAC0b,KAAP,CAAc,GAAd,CAApB,CACAmwB,YAAY,CAACr3C,IAAb,CAAmBs3C,WAAnB,CAEA,CAIF;AAIA,OAFM73C,GAAE,CAAG43C,YAAY,CAAE,CAAF,CAEvB,CAAUrrC,EAAC,CAAG,CAAd,CAAiBC,GAAE,CAAGorC,YAAY,CAAC73C,MAAb,CAAsB,CAA5C,CAA+CwM,EAAC,CAAGC,GAAnD,CAAuDD,EAAC,EAAxD,CAA8D,IAEvDpM,GAAE,CAAGy3C,YAAY,CAAErrC,EAAF,CAFsC,CAGvDlM,EAAE,CAAGu3C,YAAY,CAAErrC,EAAC,CAAG,CAAN,CAHsC,CAK7DonC,KAAK,CAAClmC,OAAN,CACCzN,EAAE,CAAE,CAAF,CADH,CACUG,EAAE,CAAE,CAAF,CADZ,CACmBE,EAAE,CAAE,CAAF,CADrB,CAECL,EAAE,CAAE,CAAF,CAFH,CAEUG,EAAE,CAAE,CAAF,CAFZ,CAEmBE,EAAE,CAAE,CAAF,CAFrB,CAGCL,EAAE,CAAE,CAAF,CAHH,CAGUG,EAAE,CAAE,CAAF,CAHZ,CAGmBE,EAAE,CAAE,CAAF,CAHrB,CAMA,CAED,CAtCM,IAsCA,IAAuB,GAAlB,GAAA+2C,aAAL,CAA6B,IAE7BU,UAAS,CAAGhkB,IAAI,CAACikB,SAAL,CAAgB,CAAhB,EAAoBR,IAApB,GAA2B9vB,KAA3B,CAAkC,GAAlC,CAFiB,CAG/BuwB,YAAY,CAAG,EAHgB,CAI7BC,OAAO,CAAG,EAJmB,CAMnC,GAA6B,CAAE,CAA1B,GAAAnkB,IAAI,CAACojB,OAAL,CAAc,GAAd,CAAL,CAECc,YAAY,CAAGF,SAFhB,KAMC,KAAM,GAECI,MAFD,CAAIC,EAAE,CAAG,CAAT,CAAYC,IAAI,CAAGN,SAAS,CAAC/3C,MAAnC,CAA2Co4C,EAAE,CAAGC,IAAhD,CAAsDD,EAAE,EAAxD,CAEOD,KAFP,CAEeJ,SAAS,CAAEK,EAAF,CAAT,CAAgB1wB,KAAhB,CAAuB,GAAvB,CAFf,CAIqB,EAAf,GAAAywB,KAAK,CAAE,CAAF,CAJX,EAI0BF,YAAY,CAACz3C,IAAb,CAAmB23C,KAAK,CAAE,CAAF,CAAxB,CAJ1B,CAKqB,EAAf,GAAAA,KAAK,CAAE,CAAF,CALX,EAK0BD,OAAO,CAAC13C,IAAR,CAAc23C,KAAK,CAAE,CAAF,CAAnB,CAL1B,CAWDvE,KAAK,CAACoD,eAAN,CAAuBiB,YAAvB,CAAqCC,OAArC,CAEA,CAzBM,IAyBA,IAAuB,GAAlB,GAAAb,aAAL,CAA6B,IAE7BK,UAAQ,CAAG3jB,IAAI,CAAC4jB,MAAL,CAAa,CAAb,EAAiBH,IAAjB,EAFkB,CAG7Bc,SAAS,CAAGZ,SAAQ,CAAChwB,KAAT,CAAgB,GAAhB,CAHiB,CAKnCksB,KAAK,CAACkD,gBAAN,CAAwBwB,SAAxB,CAEA,CAPM,IAOA,IAAmD,IAA9C,IAAE3/B,MAAM,CAAGu6B,eAAe,CAACN,IAAhB,CAAsB7e,IAAtB,CAAX,CAAL,CAA0D,CAEhE;AACA;AACA;AAEA;AACA;AACA,GAAMtwB,KAAI,CAAG,CAAE,IAAMkV,MAAM,CAAE,CAAF,CAAN,CAAYg/B,MAAZ,CAAoB,CAApB,EAAwBH,IAAxB,EAAR,EAAyCG,MAAzC,CAAiD,CAAjD,CAAb,CAEA/D,KAAK,CAACG,WAAN,CAAmBtwC,IAAnB,CAEA,CAZM,IAYA,IAAK2vC,qBAAqB,CAACx7B,IAAtB,CAA4Bmc,IAA5B,CAAL,CAEN;AAEA6f,KAAK,CAACl9B,MAAN,CAAa49B,aAAb,CAA4BvgB,IAAI,CAACikB,SAAL,CAAgB,CAAhB,EAAoBR,IAApB,EAA5B,CAAwD5D,KAAK,CAACE,iBAA9D,CAJM,KAMA,IAAKX,yBAAyB,CAACv7B,IAA1B,CAAgCmc,IAAhC,CAAL,CAEN;AAEA6f,KAAK,CAACE,iBAAN,CAAwBtzC,IAAxB,CAA8BuzB,IAAI,CAACikB,SAAL,CAAgB,CAAhB,EAAoBR,IAApB,EAA9B,CAJM,KAMA,IAAKnE,gBAAgB,CAACz7B,IAAjB,CAAuBmc,IAAvB,CAAL,CAEN;AACA;AAEA7lB,OAAO,CAACqI,IAAR,CAAc,wGAAd,CALM,KAOA,IAAuB,GAAlB,GAAA8gC,aAAL,CAA6B,CAInC;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;QAWA,GAtBA1+B,MAAM,CAAGob,IAAI,CAACrM,KAAL,CAAY,GAAZ,CAsBT,CAAqB,CAAhB,CAAA/O,MAAM,CAAC3Y,MAAZ,CAAyB,CAExB,GAAMoT,MAAK,CAAGuF,MAAM,CAAE,CAAF,CAAN,CAAY6+B,IAAZ,GAAmBzvB,WAAnB,EAAd,CACA6rB,KAAK,CAACl9B,MAAN,CAAa29B,MAAb,CAAkC,GAAV,GAAAjhC,KAAK,EAAsB,KAAV,GAAAA,KAEzC,CALD,IAOC;AACAwgC,KAAK,CAACl9B,MAAN,CAAa29B,MAAb,GARD,CAYA,GAAM72C,SAAQ,CAAGo2C,KAAK,CAACl9B,MAAN,CAAaw9B,eAAb,EAAjB,CACK12C,QArC8B,GAqCnBA,QAAQ,CAAC62C,MAAT,CAAkBT,KAAK,CAACl9B,MAAN,CAAa29B,MArCZ,CAuCnC,CAvCM,IAuCA,CAEN;AACA,GAAc,IAAT,GAAAtgB,IAAL,CAAqB,SAErB7lB,OAAO,CAACqI,IAAR,CAAc,uCAAwCwd,IAAxC,CAA+C,IAA7D,CAEA,CAIF6f,KAAK,CAACsB,QAAN,EA9Oa,CAgPb,GAAMzc,UAAS,CAAG,GAAIrc,4CAAtB,CACAqc,SAAS,CAACqb,iBAAV,CAA8B,GAAG9pB,MAAH,CAAW4pB,KAAK,CAACE,iBAAjB,CAjPjB,CAmPb,GAAMyE,cAAa,CAAgC,CAAzB,GAAA3E,KAAK,CAACC,OAAN,CAAc7zC,MAAd,EAA8E,CAAhD,GAAA4zC,KAAK,CAACC,OAAN,CAAe,CAAf,EAAmB12C,QAAnB,CAA4B+C,QAA5B,CAAqCF,MAA7F,CAEA,GAAK,IAAAu4C,aAAL,CAEC,IAAM,GAAIz4C,GAAC,CAAG,CAAR,CAAW4S,GAAC,CAAGkhC,KAAK,CAACC,OAAN,CAAc7zC,MAAnC,CAA2CF,EAAC,CAAG4S,GAA/C,CAAkD5S,EAAC,EAAnD,CAAyD,IAElD4W,OAAM,CAAGk9B,KAAK,CAACC,OAAN,CAAe/zC,EAAf,CAFyC,CAGlD3C,QAAQ,CAAGuZ,MAAM,CAACvZ,QAHgC,CAIlD6kB,SAAS,CAAGtL,MAAM,CAACsL,SAJ+B,CAKlDpL,MAAM,CAAuB,MAAlB,GAAAzZ,QAAQ,CAAC4N,IAL8B,CAMlD4L,QAAQ,CAAuB,QAAlB,GAAAxZ,QAAQ,CAAC4N,IAN4B,CAOpDytC,eAAe,GAPqC,CASxD;AACA,GAAkC,CAA7B,GAAAr7C,QAAQ,CAAC+C,QAAT,CAAkBF,MAAvB,EAEA,GAAMoV,eAAc,CAAG,GAAItX,qDAA3B,CAEAsX,cAAc,CAACvQ,YAAf,CAA6B,UAA7B,CAAyC,GAAI+Q,6DAAJ,CAA4BzY,QAAQ,CAAC+C,QAArC,CAA+C,CAA/C,CAAzC,CAJA,CAM+B,CAA1B,CAAA/C,QAAQ,CAAC8N,OAAT,CAAiBjL,MANtB,EAQCoV,cAAc,CAACvQ,YAAf,CAA6B,QAA7B,CAAuC,GAAI+Q,6DAAJ,CAA4BzY,QAAQ,CAAC8N,OAArC,CAA8C,CAA9C,CAAvC,CARD,CAY8B,CAAzB,CAAA9N,QAAQ,CAAC6N,MAAT,CAAgBhL,MAZrB,GAcCw4C,eAAe,GAdhB,CAeCpjC,cAAc,CAACvQ,YAAf,CAA6B,OAA7B,CAAsC,GAAI+Q,6DAAJ,CAA4BzY,QAAQ,CAAC6N,MAArC,CAA6C,CAA7C,CAAtC,CAfD,EAmBK,KAAA7N,QAAQ,CAACi3C,YAnBd,EAqBCh/B,cAAc,CAACvQ,YAAf,CAA6B,IAA7B,CAAmC,GAAI+Q,6DAAJ,CAA4BzY,QAAQ,CAAC+N,GAArC,CAA0C,CAA1C,CAAnC,CArBD,CA6BA,OAFMutC,iBAAgB,CAAG,EAEzB,CAAUzD,EAAE,CAAG,CAAf,CAAkB0D,KAAK,CAAG12B,SAAS,CAAChiB,MAApC,CAA4Cg1C,EAAE,CAAG0D,KAAjD,CAAwD1D,EAAE,EAA1D,CAAgE,IAEzD2D,eAAc,CAAG32B,SAAS,CAAEgzB,EAAF,CAF+B,CAGzD4D,YAAY,CAAGD,cAAc,CAACl1C,IAAf,CAAsB,GAAtB,CAA4Bk1C,cAAc,CAACtE,MAA3C,CAAoD,GAApD,CAA0DmE,eAHhB,CAI3Dh7C,SAAQ,CAAGo2C,KAAK,CAAC5xB,SAAN,CAAiB42B,YAAjB,CAJgD,CAM/D,GAAwB,IAAnB,QAAK52B,SAAV,CAIC;AACA,GAHAxkB,SAAQ,CAAG,KAAKwkB,SAAL,CAAelhB,MAAf,CAAuB63C,cAAc,CAACl1C,IAAtC,CAGX,CAAKmT,MAAM,EAAIpZ,SAAV,EAAsB,EAAIA,SAAQ,WAAYk3B,wDAAxB,CAA3B,CAAyE,CAExE,GAAMmkB,aAAY,CAAG,GAAInkB,wDAAzB,CACAokB,8CAAQ,CAACl4C,SAAT,CAAmByO,IAAnB,CAAwBzS,IAAxB,CAA8Bi8C,YAA9B,CAA4Cr7C,SAA5C,CAHwE,CAIxEq7C,YAAY,CAAC76C,KAAb,CAAmBqR,IAAnB,CAAyB7R,SAAQ,CAACQ,KAAlC,CAJwE,CAKxER,SAAQ,CAAGq7C,YAEX,CAPD,IAOO,IAAKliC,QAAQ,EAAInZ,SAAZ,EAAwB,EAAIA,SAAQ,WAAYs0B,qDAAxB,CAA7B,CAAwE,CAE9E,GAAMinB,eAAc,CAAG,GAAIjnB,qDAAJ,CAAoB,CAAE9V,IAAI,CAAE,EAAR,CAAYY,eAAe,GAA3B,CAApB,CAAvB,CACAk8B,8CAAQ,CAACl4C,SAAT,CAAmByO,IAAnB,CAAwBzS,IAAxB,CAA8Bm8C,cAA9B,CAA8Cv7C,SAA9C,CAH8E,CAI9Eu7C,cAAc,CAAC/6C,KAAf,CAAqBqR,IAArB,CAA2B7R,SAAQ,CAACQ,KAApC,CAJ8E,CAK9E+6C,cAAc,CAACh6C,GAAf,CAAqBvB,SAAQ,CAACuB,GALgD,CAM9EvB,SAAQ,CAAGu7C,cAEX,CAIG,SAAAv7C,SA9B0D,GAkC7DA,SAlC6D,CAgCzDoZ,MAhCyD,CAkClD,GAAI8d,wDAlC8C,CAoClD/d,QApCkD,CAsClD,GAAImb,qDAAJ,CAAoB,CAAE9V,IAAI,CAAE,CAAR,CAAWY,eAAe,GAA1B,CAApB,CAtCkD,CA0ClD,GAAI3e,wDA1C8C,CA8C9DT,SAAQ,CAACiG,IAAT,CAAgBk1C,cAAc,CAACl1C,IA9C+B,CA+C9DjG,SAAQ,CAACw7C,WAAT,EAAuBL,cAAc,CAACtE,MA/CwB,CAgD9D72C,SAAQ,CAACc,YAAT,CAAwBk6C,eAhDsC,CAkD9D5E,KAAK,CAAC5xB,SAAN,CAAiB42B,YAAjB,EAAkCp7C,SAlD4B,EAsD/Di7C,gBAAgB,CAACj4C,IAAjB,CAAuBhD,SAAvB,CAEA,CAED;AAEA,GAAIwB,KAAI,OAAR,CAEA,GAA+B,CAA1B,CAAAy5C,gBAAgB,CAACz4C,MAAtB,CAAmC,CAElC,IAAM,GAEC24C,gBAFD,CAAI3D,GAAE,CAAG,CAAT,CAAY0D,MAAK,CAAG12B,SAAS,CAAChiB,MAApC,CAA4Cg1C,GAAE,CAAG0D,MAAjD,CAAwD1D,GAAE,EAA1D,CAEO2D,eAFP,CAEwB32B,SAAS,CAAEgzB,GAAF,CAFjC,CAGC5/B,cAAc,CAAC49B,QAAf,CAAyB2F,eAAc,CAAChE,UAAxC,CAAoDgE,eAAc,CAAClG,UAAnE,CAA+EuC,GAA/E,CAHD,CASCh2C,IAXiC,CAS7B4X,MAT6B,CAW1B,GAAIod,mDAAJ,CAAkB5e,cAAlB,CAAkCqjC,gBAAlC,CAX0B,CAatB9hC,QAbsB,CAe1B,GAAIua,6CAAJ,CAAY9b,cAAZ,CAA4BqjC,gBAA5B,CAf0B,CAmB1B,GAAIx5C,2CAAJ,CAAUmW,cAAV,CAA0BqjC,gBAA1B,CAIR,CAvBD,IA2BEz5C,KA3BF,CAyBM4X,MAzBN,CA2BS,GAAIod,mDAAJ,CAAkB5e,cAAlB,CAAkCqjC,gBAAgB,CAAE,CAAF,CAAlD,CA3BT,CA6Ba9hC,QA7Bb,CA+BS,GAAIua,6CAAJ,CAAY9b,cAAZ,CAA4BqjC,gBAAgB,CAAE,CAAF,CAA5C,CA/BT,CAmCS,GAAIx5C,2CAAJ,CAAUmW,cAAV,CAA0BqjC,gBAAgB,CAAE,CAAF,CAA1C,CAnCT,CAyCAz5C,IAAI,CAACyE,IAAL,CAAYiT,MAAM,CAACjT,IApInB,CAsIAg1B,SAAS,CAAC70B,GAAV,CAAe5E,IAAf,CAtIA,CAwIA,CApJF,IAwJC;AAEA,GAA6B,CAAxB,CAAA40C,KAAK,CAAC1zC,QAAN,CAAeF,MAApB,CAAiC,IAE1BxC,WAAQ,CAAG,GAAIs0B,qDAAJ,CAAoB,CAAE9V,IAAI,CAAE,CAAR,CAAWY,eAAe,GAA1B,CAApB,CAFe,CAI1BxH,eAAc,CAAG,GAAItX,qDAJK,CAMhCsX,eAAc,CAACvQ,YAAf,CAA6B,UAA7B,CAAyC,GAAI+Q,6DAAJ,CAA4Bg+B,KAAK,CAAC1zC,QAAlC,CAA4C,CAA5C,CAAzC,CANgC,CAQL,CAAtB,CAAA0zC,KAAK,CAAC5oC,MAAN,CAAahL,MAAb,EAA2B,SAAA4zC,KAAK,CAAC5oC,MAAN,CAAc,CAAd,CARA,GAU/BoK,eAAc,CAACvQ,YAAf,CAA6B,OAA7B,CAAsC,GAAI+Q,6DAAJ,CAA4Bg+B,KAAK,CAAC5oC,MAAlC,CAA0C,CAA1C,CAAtC,CAV+B,CAW/BxN,UAAQ,CAACc,YAAT,GAX+B,EAehC,GAAMkU,OAAM,CAAG,GAAI0e,6CAAJ,CAAY9b,eAAZ,CAA4B5X,UAA5B,CAAf,CACAi7B,SAAS,CAAC70B,GAAV,CAAe4O,MAAf,CAEA,CAIF,MAAOimB,UAEP,CA3d6B,C;;;;;;AC/a/B,GAAMvZ,WAAU,CAAGnkB,mBAAO,CAAC,EAAD,CAAP,CAAwBmkB,UAA3C,CAEAxiB,OAAO,CAACmtC,gBAAR,CAA2B,UAAY,IACjCoP,oBAAmB,CAAG,CADW,CAGrC,KAAKh3B,WAAL,CAAmB,WAHkB,IAI/BL,OAAM,CAAG,GAAI1C,WAJkB,CAK/Bg6B,WAAW,CAAG,EALiB,CAOrC,KAAKl4B,IAAL,CAAY,CAACvJ,GAAD,CAAM2P,MAAN,CAAcC,UAAd,CAA0BC,OAA1B,GAAsC,CAChD,GANmB,EAMf,CAAe2xB,mBAAnB,CAAwC,CACtC,EAAEA,mBADoC,CAEtCr3B,MAAM,CAACK,WAAP,CAAqB,KAAKA,WAFY,IAGhCk3B,eAAc,CAAG,GAAIC,UAAJ,CAAchyB,MAAd,CAAsB,IAAtB,CAHe,CAIhCiyB,eAAe,CAAG,GAAID,UAAJ,CAAc9xB,OAAd,CAAuB,IAAvB,CAJc,CAKtC1F,MAAM,CAACZ,IAAP,CAAYvJ,GAAZ,CAAiB0hC,cAAjB,CAAiC9xB,UAAjC,CAA6CgyB,eAA7C,CACD,CAND,IAOEH,YAAW,CAAC14C,IAAZ,CAAiB,CACfiX,GADe,CAEf2P,MAFe,CAGfC,UAHe,CAIfC,OAJe,CAAjB,CAOH,CAtBoC,CAwBrC,KAAKgyB,mBAAL,CAA2B,IAAM,CAC/B,GAAM1L,KAAI,CAAGsL,WAAW,CAACK,KAAZ,EAAb,CACI3L,IAF2B,EAG7B,KAAK5sB,IAAL,CAAU4sB,IAAI,CAACn2B,GAAf,CAAoBm2B,IAAI,CAACxmB,MAAzB,CAAiCwmB,IAAI,CAACvmB,UAAtC,CAAkDumB,IAAI,CAACtmB,OAAvD,CACH,CA5BoC,CA8BrC,GAAM8xB,UAAS,CAAG,SAASvhC,QAAT,CAAmB+J,MAAnB,CAA2B,CAC3C,MAAO,WAAa,CAClB,EAAEq3B,mBADgB,CAElBphC,QAAQ,CAAC,YAAD,CAFU,CAGlB+J,MAAM,CAAC03B,mBAAP,EACD,CACF,CAND,CASA,KAAKx3B,KAAL,CAAa7N,IAAI,EACR2N,MAAM,CAACE,KAAP,CAAa7N,IAAb,CAGV,C;;;;;;GC7CKzX,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CAEfy+C,UAAU,CAAGz+C,mBAAO,CAAC,EAAD,CAAP,CAAiDy+C,U,CAE9DjL,kBAAkB,CAAG,UAAY,CAErC,GAAMre,MAAK,CAAG,IAAd,CAwDA;;;;;;KAtDA,KAAKupB,gBAAL,CAAwB,CAAC/iC,MAAD,CAASpU,MAAT,CAAiB0zB,KAAjB,CAAwB7U,cAAxB,GAA2C,CACjE,GAAI8tB,YAAW,CAAG3sC,MAAlB,CACA,GAAc,CAAV,GAAA0zB,KAAJ,CACE,GAAoB,UAAhB,GAAAtf,MAAM,CAAC3L,IAAX,CAYO,CACL,GAAIgiC,aAAJ,CAQA,GAPoB,MAAhB,GAAAr2B,MAAM,CAAC3L,IAOX,CANEgiC,YAAY,CAAG,IAAKhyC,mBAAO,CAAC,CAAD,CAAP,CAAkCM,QAAvC,CAMjB,CAL2B,cAAhB,GAAAqb,MAAM,CAAC3L,IAKlB,CAJEgiC,YAAY,CAAG,IAAKhyC,mBAAO,CAAC,EAAD,CAAP,CAA+BU,KAApC,CAIjB,CAH2B,QAAhB,GAAAib,MAAM,CAAC3L,IAGlB,GAFEgiC,YAAY,CAAG,IAAKhyC,mBAAO,CAAC,EAAD,CAAP,CAAkCS,QAAvC,CAEjB,EAAIuxC,YAAJ,CAAkB,IACZpvC,iBAAgB,GADJ,CAEZC,gBAAgB,GAFJ,CAGZ8Y,MAAM,CAACvZ,QAAP,EAAmBuZ,MAAM,CAACvZ,QAAP,CAAgBqB,eAHvB,GAIdb,gBAAgB,GAAG+Y,MAAM,CAACvZ,QAAP,CAAgBqB,eAAhB,CAAgC2F,QAJrC,CAKdvG,gBAAgB,GAAG8Y,MAAM,CAACvZ,QAAP,CAAgBqB,eAAhB,CAAgCR,KALrC,EAOhB+uC,YAAY,CAAC7tC,OAAb,CAAqBwX,MAAM,CAACxT,KAAP,EAArB,CAAqCvF,gBAArC,CAAuDC,gBAAvD,CAPgB,CAQhB0E,MAAM,CAAC8hC,aAAP,CAAqB2I,YAArB,CARgB,CAShBA,YAAY,CAAC3rC,SAAb,CAAyB2rC,YAAY,CAAC3vC,KAAb,CAAmBqG,IAT5B,CAUhBspC,YAAY,CAAC3vC,KAAb,CAAmBuH,gBAAnB,GAVgB,CAWZ,MAAAwc,cAAc,EAA2C,UAAzB,QAAOA,eAX3B,EAYdA,cAAc,CAAC4rB,YAAD,CACjB,CACF,CAnCD,IACE,IAAoB,EAAhB,GAAAr2B,MAAM,CAACjT,IAAX,GACMnB,MADN,GAEI2sC,WAAW,CAAG3sC,MAAM,CAAC4sC,yBAAP,CAAiCx4B,MAAM,CAACjT,IAAxC,CAFlB,EAGQwrC,WAHR,EAGqB,CACf,GAAM5gC,MAAK,CAAG4gC,WAAW,CAAC9wB,QAAZ,EAAd,CACA9P,KAAK,CAAClK,QAAN,CAAekL,IAAf,CAAoBqH,MAAM,CAACvS,QAA3B,CAFe,CAGfkK,KAAK,CAACqrC,QAAN,CAAerqC,IAAf,CAAoBqH,MAAM,CAACgjC,QAA3B,CAHe,CAIfrrC,KAAK,CAACsrC,UAAN,CAAiBtqC,IAAjB,CAAsBqH,MAAM,CAACijC,UAA7B,CAJe,CAKftrC,KAAK,CAAC1J,gBAAN,GACD,CA2BTqxB,KAAK,EAxC4D,CAyCjEtf,MAAM,CAACshB,QAAP,CAAgBnC,OAAhB,CAAyBiX,KAAK,EAAI,CAChC5c,KAAK,CAACupB,gBAAN,CAAuB3M,KAAvB,CAA8BmC,WAA9B,CAA2CjZ,KAA3C,CAAkD7U,cAAlD,CACD,CAFD,CAGD,CAhDoC,CAkDrC,KAAKy4B,SAAL,CAAiB7vC,KAAK,EAAI,CACxBA,KAAK,CAACiyB,OAAN,EADwB,IAElB6d,eAAc,CAAG9vC,KAAK,CAACI,qBAAN,EAFC,CAGlB24B,QAAQ,CAAG+W,cAAc,CAACpa,kBAAf,EAHO,CAIxBoa,cAAc,CAAC9W,WAAf,CAA2B,SAA3B,CAAsCD,QAAtC,CAJwB,CAKxB+W,cAAc,CAAC7W,kBAAf,CAAkC,SAAlC,CACD,CAxDoC,CAiErC,KAAKhiB,IAAL,CAAY,CAACjX,KAAD,CAAQzH,MAAR,CAAgBmV,GAAhB,CAAqB0J,cAArB,CAAqC2jB,oBAArC,GAAuE,IAC3E9Y,KAAI,CAAGvU,GAAG,CAACugC,SAAJ,CAAc,CAAd,CAAiBvgC,GAAG,CAACqiC,WAAJ,CAAgB,GAAhB,EAAuB,CAAxC,CADoE,CAE3E7N,QAAQ,CAAGx0B,GAAG,CAACugC,SAAJ,CAAcvgC,GAAG,CAACqiC,WAAJ,CAAgB,GAAhB,EAAuB,CAArC,CAAwCriC,GAAG,CAACzX,MAA5C,CAFgE,CAG3E4hB,MAAM,CAAG,GAAI43B,WAAJ,GAAiBrJ,OAAjB,CAAyBnkB,IAAzB,CAHkE,CAKjFpK,MAAM,CAACZ,IAAP,CAAairB,QAAb,CAAuB,SAAW8N,IAAX,CAAkB,CACvC7rC,OAAO,CAAC8rC,GAAR,CAAYD,IAAZ,CADuC,CAEvC7pB,KAAK,CAACupB,gBAAN,CAAuBM,IAAI,CAAChwC,KAA5B,CAAmCzH,MAAnC,CAA2C,CAA3C,CAA8C6e,cAA9C,CAFuC,CAGvC+O,KAAK,CAAC0pB,SAAN,CAAgB7vC,KAAhB,CAHuC,CAInC+6B,oBAAoB,MAApB,EAAqE,UAA/B,QAAOA,qBAJV,EAKrCA,oBAAoB,EACvB,CAND,CAOD,CACF,C,CAEDpoC,OAAO,CAAC6xC,kBAAR,CAA6BA,kB;;;;;;ACpF7B,kE;;;;;;GCAM0L,aAAY,CAAGl/C,mBAAO,CAAC,EAAD,CAAP,CAAgCk/C,Y,CAS/Cla,aAAa,CAAG,SAAUxE,OAAV,CAAmB,CACvC,GAAMxxB,MAAK,CAAGwxB,OAAd,CAED,KAAKgO,UAAL,CAAmBC,MAAD,EAAY,IACrBhJ,WAAU,CAAGz2B,KAAK,CAAC2/B,aAAN,EADQ,CAErBxF,WAAW,CAAG1D,UAAU,CAAC0Z,aAAX,IAFO,CAGrBpwB,UAAU,CAAG,EAHQ,CAI3Boa,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAC5BA,UAAU,CAAC1Z,aADiB,EAE9BunB,UAAU,CAACtpB,IAAX,CAAgB,CAACypB,IAAI,CAAEhO,UAAU,CAAC1Z,aAAX,CAAyB,CAAzB,CAAP,CAAoCvD,IAAI,CAAEid,UAAU,CAAC7e,KAArD,CAAhB,CAEH,CAJD,CAJ2B,IASrBqsC,SAAQ,CAAG,GAAIwQ,aATM,CAUrB/8C,OAAO,CAAG,CAAEssC,MAAF,CAAU1f,UAAV,CAVW,CAW3B,MAAO,IAAI6M,QAAJ,CAAaC,OAAD,EAAqB,CACtC6S,QAAQ,CAAC3nB,KAAT,CAAgB/X,KAAK,CAAC80B,eAAN,EAAhB,CAAyC,SAAWkb,IAAX,CAAkB,CACzDnjB,OAAO,CAACmjB,IAAD,CACR,CAFD,CAEG78C,OAFH,CAGD,CAJM,CAKT,CACD,C,CA3BD;;;;;;GA6BAR,OAAO,CAACqjC,aAAR,CAAwBA,a;;;;;;;AC/BxB;AAAA;AAAA;AAAA;AAwBA,KAAMka,aAAa,CAElBnuC,WAAW,EAAG,CAEb,KAAKquC,eAAL,CAAuB,EAFV,CAIb,KAAKC,QAAL,CAAe,SAAWC,MAAX,CAAoB,CAElC,MAAO,IAAIC,mBAAJ,CAAwBD,MAAxB,CAEP,CAJD,CAJa,CAUb,KAAKD,QAAL,CAAe,SAAWC,MAAX,CAAoB,CAElC,MAAO,IAAIE,4BAAJ,CAAiCF,MAAjC,CAEP,CAJD,CAVa,CAgBb,KAAKD,QAAL,CAAe,SAAWC,MAAX,CAAoB,CAElC,MAAO,IAAIG,mCAAJ,CAAwCH,MAAxC,CAEP,CAJD,CAMA,CAEDD,QAAQ,CAAEviC,QAAF,CAAa,CAQpB,MANkD,CAAE,CAA/C,QAAKsiC,eAAL,CAAqBhD,OAArB,CAA8Bt/B,QAA9B,CAML,EAJC,KAAKsiC,eAAL,CAAqB35C,IAArB,CAA2BqX,QAA3B,CAID,CAAO,IAEP,CAED4iC,UAAU,CAAE5iC,QAAF,CAAa,CAQtB,MANkD,CAAE,CAA/C,QAAKsiC,eAAL,CAAqBhD,OAArB,CAA8Bt/B,QAA9B,CAML,EAJC,KAAKsiC,eAAL,CAAqB7nC,MAArB,CAA6B,KAAK6nC,eAAL,CAAqBhD,OAArB,CAA8Bt/B,QAA9B,CAA7B,CAAuE,CAAvE,CAID,CAAO,IAEP,CAED;;;;;IAMAiK,KAAK,CAAE44B,KAAF,CAASC,MAAT,CAAiBz9C,OAAjB,CAA2B,CAK/B,OAHMm9C,OAAM,CAAG,GAAIO,WAGnB,CAFMC,OAAO,CAAG,EAEhB,CAAU/6C,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAG,KAAK+tC,eAAL,CAAqBn6C,MAA3C,CAAmDF,CAAC,CAAGsM,EAAvD,CAA2DtM,CAAC,EAA5D,CAEC+6C,OAAO,CAACr6C,IAAR,CAAc,KAAK25C,eAAL,CAAsBr6C,CAAtB,EAA2Bu6C,MAA3B,CAAd,EAIDA,MAAM,CAACS,UAAP,CAAmBD,OAAnB,CAX+B,CAY/BR,MAAM,CAACU,KAAP,CAAcL,KAAd,CAAqBC,MAArB,CAA6Bz9C,OAA7B,CAEA,CAtEiB,CA0EnB;AACA;AACA;GAEM89C,gBAAe,CAAG,CACvBC,MAAM,CAAE,CADe,CAEvBC,KAAK,CAAE,CAFgB,CAGvBC,SAAS,CAAE,CAHY,CAIvBC,UAAU,CAAE,CAJW,CAKvBC,SAAS,CAAE,CALY,CAMvBC,cAAc,CAAE,CANO,CAOvBC,YAAY,CAAE,CAPS,CASvBC,aAAa,CAAE,IATQ,CAUvBC,cAAc,CAAE,IAVO,CAWvBC,KAAK,CAAE,IAXgB,CAYvBC,YAAY,CAAE,IAZS,CAavBC,YAAY,CAAE,KAbS,CAcvBC,oBAAoB,CAAE,KAdC,CAgBvBC,OAAO,CAAE,IAhBc,CAiBvBC,MAAM,CAAE,IAjBe,CAkBvBC,sBAAsB,CAAE,IAlBD,CAmBvBC,qBAAqB,CAAE,IAnBA,CAoBvBC,qBAAqB,CAAE,IApBA,CAqBvBC,oBAAoB,CAAE,IArBC,CAuBvBC,aAAa,CAAE,KAvBQ,CAwBvBC,eAAe,CAAE,KAxBM,CAyBvBC,MAAM,CAAE,KAzBe,C,CA4BlBC,cAAc,CAAG,E,CAEvBA,cAAc,CAAEC,mDAAF,CAAd,CAAkCxB,eAAe,CAACc,O,CAClDS,cAAc,CAAEE,gEAAF,CAAd,CAA+CzB,eAAe,CAACgB,sB,CAC/DO,cAAc,CAAEG,+DAAF,CAAd,CAA8C1B,eAAe,CAACkB,qB,CAC9DK,cAAc,CAAE5rB,kDAAF,CAAd,CAAiCqqB,eAAe,CAACe,M,CACjDQ,cAAc,CAAEI,+DAAF,CAAd,CAA8C3B,eAAe,CAACiB,qB,CAC9DM,cAAc,CAAEK,8DAAF,CAAd,CAA6C5B,eAAe,CAACmB,oB,CAE7DI,cAAc,CAAEM,yDAAF,CAAd,CAAwC7B,eAAe,CAACoB,a,CACxDG,cAAc,CAAEjwB,oDAAF,CAAd,CAAmC0uB,eAAe,CAACsB,M,CACnDC,cAAc,CAAE/vB,4DAAF,CAAd,CAA2CwuB,eAAe,CAACqB,e,IAErDS,gBAAe,CAAG,CACvB1vC,KAAK,CAAE,OADgB,CAEvBjJ,QAAQ,CAAE,aAFa,CAGvBw1C,UAAU,CAAE,UAHW,CAIvBl0C,qBAAqB,CAAE,SAJA,C,CAUlBs3C,gBAAgB,CAAG,E,CACnBC,gBAAgB,CAAG,U,CACnBC,WAAW,CAAG,C,CAEdC,sBAAsB,CAAG,C,CACzBC,mBAAmB,CAAG,U,CACtBC,kBAAkB,CAAG,O,CAT3B;AACA;AAUA;AACA;AACA;AAEA;;;;;GAMA,QAASC,WAAT,CAAqBC,MAArB,CAA6BC,MAA7B,CAAsC,CAErC,MAASD,OAAM,CAACt9C,MAAP,GAAkBu9C,MAAM,CAACv9C,MAA3B,EAAuCs9C,MAAM,CAACE,KAAP,CAAc,SAAWC,OAAX,CAAoBxvC,KAApB,CAA4B,CAEvF,MAAOwvC,QAAO,GAAKF,MAAM,CAAEtvC,KAAF,CAEzB,CAJ6C,CAM9C,CAED;;;;GAKA,QAASyvC,oBAAT,CAA8BjlC,IAA9B,CAAqC,CAEpC,GAAKklC,MAAM,CAACC,WAAP,SAAL,CAEC,MAAO,IAAIA,YAAJ,GAAkBC,MAAlB,CAA0BplC,IAA1B,EAAiC3C,MAAxC,CAMD,OAEO1C,MAFP,CAFMpL,KAAK,CAAG,GAAImT,WAAJ,CAAgB,GAAI2iC,YAAJ,CAAiBrlC,IAAI,CAACzY,MAAtB,CAAhB,CAEd,CAAUF,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAGqM,IAAI,CAACzY,MAA3B,CAAmCF,CAAC,CAAGsM,EAAvC,CAA2CtM,CAAC,EAA5C,CAIC;AAFMsT,KAFP,CAEeqF,IAAI,CAACs4B,UAAL,CAAiBjxC,CAAjB,CAFf,CAKCkI,KAAK,CAAElI,CAAF,CAAL,CAAqB,GAAR,CAAAsT,KAAK,CAAU,EAAV,CAAiBA,KALpC,CASA,MAAOpL,MAAK,CAAC8N,MAEb,CAED;;;;;GAMA,QAASioC,iBAAT,CAA2BhyC,MAA3B,CAAoC,CAEnC,MAAOsxC,WAAU,CAAEtxC,MAAM,CAAC2S,QAAT,CAAmB,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAW,CAAX,CAAc,CAAd,CAAiB,CAAjB,CAAoB,CAApB,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAA7B,CAAgC,CAAhC,CAAmC,CAAnC,CAAsC,CAAtC,CAAyC,CAAzC,CAA4C,CAA5C,CAA+C,CAA/C,CAAnB,CAEjB,CAED;;;;;;GAOA,QAASs/B,UAAT,CAAoBroC,SAApB,CAA+BrH,KAA/B,CAAsCxG,KAAtC,CAA8C,CAS7C,OAPMm2C,OAAM,CAAG,CAEd1+C,GAAG,CAAMiQ,KAAJ,CAAWmG,SAAS,CAAC8E,QAArB,EAAgCJ,IAAhC,CAAsCb,MAAM,CAAC0kC,iBAA7C,CAFS,CAGd7+C,GAAG,CAAMmQ,KAAJ,CAAWmG,SAAS,CAAC8E,QAArB,EAAgCJ,IAAhC,CAAsCb,MAAM,CAAC2kC,iBAA7C,CAHS,CAOf,CAAUr+C,CAAC,CAAGwO,KAAd,CAAqBxO,CAAC,CAAGwO,KAAK,CAAGxG,KAAjC,CAAwChI,CAAC,EAAzC,CAEC,IAAM,GAEDsT,MAFC,CAAIjT,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGwV,SAAS,CAAC8E,QAA/B,CAAyCta,CAAC,EAA1C,CAEKiT,KAFL,QAI2B,CAArB,CAAAuC,SAAS,CAAC8E,QAJhB,CAQErH,KAAK,CAAGuC,SAAS,CAAC3N,KAAV,CAAiBlI,CAAC,CAAG6V,SAAS,CAAC8E,QAAd,CAAyBta,CAA1C,CARV,CAYa,CAAN,GAAAA,CAZP,CAYiBiT,KAAK,CAAGuC,SAAS,CAACpH,IAAV,CAAgBzO,CAAhB,CAZzB,CAakB,CAAN,GAAAK,CAbZ,CAasBiT,KAAK,CAAGuC,SAAS,CAACyoC,IAAV,CAAgBt+C,CAAhB,CAb9B,CAckB,CAAN,GAAAK,CAdZ,CAcsBiT,KAAK,CAAGuC,SAAS,CAAC0oC,IAAV,CAAgBv+C,CAAhB,CAd9B,CAekB,CAAN,EAAAK,CAfZ,GAesBiT,KAAK,CAAGuC,SAAS,CAAC2oC,IAAV,CAAgBx+C,CAAhB,CAf9B,EAmBCm+C,MAAM,CAAC1+C,GAAP,CAAYY,CAAZ,EAAkB+J,IAAI,CAAC3K,GAAL,CAAU0+C,MAAM,CAAC1+C,GAAP,CAAYY,CAAZ,CAAV,CAA2BiT,KAA3B,CAnBnB,CAoBC6qC,MAAM,CAAC5+C,GAAP,CAAYc,CAAZ,EAAkB+J,IAAI,CAAC7K,GAAL,CAAU4+C,MAAM,CAAC5+C,GAAP,CAAYc,CAAZ,CAAV,CAA2BiT,KAA3B,CApBnB,CA0BD,MAAO6qC,OAEP,CAED;;;;;;;GAQA,QAASM,oBAAT,CAA8BC,UAA9B,CAA2C,CAE1C,MAAqC,EAA9B,CAAAt0C,IAAI,CAACkb,IAAL,CAAWo5B,UAAU,CAAG,CAAxB,CAEP,CAED;;;;;;GAOA,QAASC,qBAAT,CAA+BC,WAA/B,CAA8D,IAAlBC,YAAkB,wDAAJ,CAAI,CAEvDC,YAAY,CAAGL,mBAAmB,CAAEG,WAAW,CAACvN,UAAd,CAFqB,CAI7D,GAAKyN,YAAY,GAAKF,WAAW,CAACvN,UAAlC,CAA+C,CAE9C,GAAMnpC,MAAK,CAAG,GAAImT,WAAJ,CAAgByjC,YAAhB,CAAd,CAGA,GAFA52C,KAAK,CAACW,GAAN,CAAW,GAAIwS,WAAJ,CAAgBujC,WAAhB,CAAX,CAEA,CAAqB,CAAhB,GAAAC,WAAL,CAEC,IAAM,GAAI7+C,EAAC,CAAG4+C,WAAW,CAACvN,UAA1B,CAAsCrxC,CAAC,CAAG8+C,YAA1C,CAAwD9+C,CAAC,EAAzD,CAECkI,KAAK,CAAElI,CAAF,CAAL,CAAa6+C,WAAb,CAMF,MAAO32C,MAAK,CAAC8N,MAEb,CAED,MAAO4oC,YAEP,CAED,GAAIG,aAAY,CAAG,IAAnB,CAEA;;GAGA,KAAMjE,WAAW,CAEhB9uC,WAAW,EAAG,CAEb,KAAK+uC,OAAL,CAAe,EAFF,CAIb,KAAK39C,OAAL,CAAe,EAJF,CAKb,KAAK4hD,OAAL,CAAe,EALF,CAMb,KAAKC,OAAL,CAAe,EANF,CAQb,KAAKC,UAAL,CAAkB,CARL,CASb,KAAKD,OAAL,CAAe,EATF,CAUb,KAAKE,OAAL,CAAe,GAAIC,IAVN,CAWb,KAAKC,KAAL,CAAa,EAXA,CAYb,KAAKC,cAAL,CAAsB,EAZT,CAcb,KAAKC,IAAL,CAAY,GAAIH,IAdH,CAeb,KAAKI,GAAL,CAAW,CAfE,CAiBb,KAAKz3B,IAAL,CAAY,CACX03B,KAAK,CAAE,CACNprC,OAAO,CAAE,KADH,CAENC,SAAS,CAAE,oBAFL,CADI,CAjBC,CAwBb,KAAKorC,KAAL,CAAa,CACZC,MAAM,CAAE,GAAIP,IADA,CAEZnhD,UAAU,CAAE,GAAImhD,IAFJ,CAGZQ,oBAAoB,CAAE,GAAIR,IAHd,CAIZl9B,SAAS,CAAE,GAAIk9B,IAJH,CAKZzyB,QAAQ,CAAE,GAAIyyB,IALF,CAMZS,MAAM,CAAE,GAAIT,IANA,CASb,CAEDpE,UAAU,CAAED,OAAF,CAAY,CAErB,KAAKA,OAAL,CAAeA,OAEf,CAED;;;;;IAMAE,KAAK,CAAEL,KAAF,CAASC,MAAT,CAAiBz9C,OAAjB,CAA2B,CAE/B,KAAKA,OAAL,CAAe2D,MAAM,CAAC+K,MAAP,CAAe,EAAf,CAAmB,CACjC;AACA49B,MAAM,GAF2B,CAGjCoW,GAAG,GAH8B,CAIjCC,WAAW,GAJsB,CAKjCC,iBAAiB,GALgB,CAMjCC,WAAW,GANsB,CAOjCC,cAAc,IAPmB,CAQjCl2B,UAAU,CAAE,EARqB,CASjCm2B,uBAAuB,GATU,CAAnB,CAUZ/iD,OAVY,CAFgB,CAcO,CAAjC,MAAKA,OAAL,CAAa4sB,UAAb,CAAwB9pB,MAdE,GAiB9B,KAAK9C,OAAL,CAAa0iD,GAAb,GAjB8B,EAqB/B,KAAKM,YAAL,CAAmBxF,KAAnB,CArB+B,CAuB/B,GAAML,OAAM,CAAG,IAAf,CAEA1jB,OAAO,CAAC8U,GAAR,CAAa,KAAKqT,OAAlB,EAA4BxT,IAA5B,CAAkC,UAAY,IAEvCyT,QAAO,CAAG1E,MAAM,CAAC0E,OAFsB,CAGvCl3B,IAAI,CAAGwyB,MAAM,CAACxyB,IAHyB,CAIvC3qB,OAAO,CAAGm9C,MAAM,CAACn9C,OAJsB,CAKvCkiD,cAAc,CAAG/E,MAAM,CAAC+E,cALe,CAQvCe,IAAI,CAAG,GAAIC,KAAJ,CAAUrB,OAAV,CAAmB,CAAEh0C,IAAI,CAAE,0BAAR,CAAnB,CARgC,CAWvCs1C,kBAAkB,CAAGx/C,MAAM,CAACkZ,IAAP,CAAaqlC,cAAb,CAXkB,CAkB7C,GALiC,CAA5B,CAAAiB,kBAAkB,CAACrgD,MAKxB,GALqC6nB,IAAI,CAACu3B,cAAL,CAAsBiB,kBAK3D,EAFKx4B,IAAI,CAACk3B,OAAL,EAAsC,CAAtB,CAAAl3B,IAAI,CAACk3B,OAAL,CAAa/+C,MAElC,GAF+C6nB,IAAI,CAACk3B,OAAL,CAAc,CAAd,EAAkB5N,UAAlB,CAA+BgP,IAAI,CAACnkC,IAEnF,EAAK,KAAA9e,OAAO,CAACssC,MAAb,CAA+B,CAE9B;AAEA,GAAMmH,OAAM,CAAG,GAAIgN,OAAM,CAAC2C,UAA1B,CACA3P,MAAM,CAAC4P,iBAAP,CAA0BJ,IAA1B,CAL8B,CAM9BxP,MAAM,CAAC6P,SAAP,CAAmB,UAAY,CAE9B;AAF8B,GAGxBC,YAAW,CAAGhC,oBAAoB,CAAE9N,MAAM,CAACh4B,MAAT,CAHV,CAIxB+nC,iBAAiB,CAAG,GAAI1P,SAAJ,CAAc,GAAI8M,YAAJ,CAAiBZ,sBAAjB,CAAd,CAJI,CAK9BwD,iBAAiB,CAACC,SAAlB,CAA6B,CAA7B,CAAgCF,WAAW,CAACtP,UAA5C,IAL8B,CAM9BuP,iBAAiB,CAACC,SAAlB,CAA6B,CAA7B,CAAgCvD,kBAAhC,IAN8B,CAQ9B;AAR8B,GASxBwD,UAAS,CAAGnC,oBAAoB,CAAEf,mBAAmB,CAAE51B,IAAI,CAAC+4B,SAAL,CAAgBh5B,IAAhB,CAAF,CAArB,CAAiD,EAAjD,CATR,CAUxBi5B,eAAe,CAAG,GAAI9P,SAAJ,CAAc,GAAI8M,YAAJ,CAAiBZ,sBAAjB,CAAd,CAVM,CAW9B4D,eAAe,CAACH,SAAhB,CAA2B,CAA3B,CAA8BC,SAAS,CAACzP,UAAxC,IAX8B,CAY9B2P,eAAe,CAACH,SAAhB,CAA2B,CAA3B,CAA8BxD,mBAA9B,IAZ8B,CAc9B;AAd8B,GAexB4D,OAAM,CAAG,GAAIjD,YAAJ,CAAiBf,gBAAjB,CAfe,CAgBxBiE,UAAU,CAAG,GAAIhQ,SAAJ,CAAc+P,MAAd,CAhBW,CAiB9BC,UAAU,CAACL,SAAX,CAAsB,CAAtB,CAAyB3D,gBAAzB,IAjB8B,CAkB9BgE,UAAU,CAACL,SAAX,CAAsB,CAAtB,CAAyB1D,WAAzB,IAlB8B,CAmB9B,GAAMgE,gBAAe,CAAGlE,gBAAgB,CACrC+D,eAAe,CAAC3P,UADK,CACQyP,SAAS,CAACzP,UADlB,CAErBuP,iBAAiB,CAACvP,UAFG,CAEUsP,WAAW,CAACtP,UAF9C,CAGA6P,UAAU,CAACL,SAAX,CAAsB,CAAtB,CAAyBM,eAAzB,IAtB8B,IAwBxBC,QAAO,CAAG,GAAId,KAAJ,CAAU,CACzBW,MADyB,CAEzBD,eAFyB,CAGzBF,SAHyB,CAIzBF,iBAJyB,CAKzBD,WALyB,CAAV,CAMb,CAAE11C,IAAI,CAAE,0BAAR,CANa,CAxBc,CAgCxBo2C,SAAS,CAAG,GAAIxD,OAAM,CAAC2C,UAhCC,CAiC9Ba,SAAS,CAACZ,iBAAV,CAA6BW,OAA7B,CAjC8B,CAkC9BC,SAAS,CAACX,SAAV,CAAsB,UAAY,CAEjC7F,MAAM,CAAEwG,SAAS,CAACxoC,MAAZ,CAEN,CAED,CAED,CAhDD,IAkDC,IAAKkP,IAAI,CAACk3B,OAAL,EAAsC,CAAtB,CAAAl3B,IAAI,CAACk3B,OAAL,CAAa/+C,MAAlC,CAA+C,CAE9C,GAAM2wC,QAAM,CAAG,GAAIgN,OAAM,CAAC2C,UAA1B,CACA3P,OAAM,CAACyQ,aAAP,CAAsBjB,IAAtB,CAH8C,CAI9CxP,OAAM,CAAC6P,SAAP,CAAmB,UAAY,CAE9B,GAAMa,WAAU,CAAG1Q,OAAM,CAACh4B,MAA1B,CACAkP,IAAI,CAACk3B,OAAL,CAAc,CAAd,EAAkBuC,GAAlB,CAAwBD,UAHM,CAI9B1G,MAAM,CAAE9yB,IAAF,CAEN,CAED,CAZD,IAcC8yB,OAAM,CAAE9yB,IAAF,CAMR,CAxFD,CA0FA,CAED;;;;;IAMA05B,iBAAiB,CAAE7qC,MAAF,CAAU8qC,SAAV,CAAsB,CAEpC,KAAI9qC,MAAM,CAAC9U,QAAP,EAAmB8U,MAAM,CAAC9U,QAAP,CAAgBV,YAAvC,GAE6C,CAA1C,GAAAL,MAAM,CAACkZ,IAAP,CAAarD,MAAM,CAAC9U,QAApB,EAA+B5B,MAFlC,KAII9C,QAAO,CAAG,KAAKA,OAJnB,CAKIkiD,cAAc,CAAG,KAAKA,cAL1B,CAOF,GAAI,CAEH,GAAMv3B,KAAI,CAAGC,IAAI,CAAChG,KAAL,CAAYgG,IAAI,CAAC+4B,SAAL,CAAgBnqC,MAAM,CAAC9U,QAAvB,CAAZ,CAAb,CAEA,GAAK1E,OAAO,CAAC+iD,uBAAR,EAAmCp4B,IAAI,CAAC45B,cAA7C,CAA8D,CAI7D,IAAM,GAAMC,cAAZ,GAFK,UAAAF,SAAS,CAACG,UAEf,GAF0CH,SAAS,CAACG,UAAV,CAAuB,EAEjE,EAA6B95B,IAAI,CAAC45B,cAAlC,CAECD,SAAS,CAACG,UAAV,CAAsBD,aAAtB,EAAwC75B,IAAI,CAAC45B,cAAL,CAAqBC,aAArB,CAFzC,CAGCtC,cAAc,CAAEsC,aAAF,CAAd,GAHD,CAOA,MAAO75B,KAAI,CAAC45B,cAEZ,CAEiC,CAA7B,CAAA5gD,MAAM,CAACkZ,IAAP,CAAa8N,IAAb,EAAoB7nB,MAnBtB,GAmBmCwhD,SAAS,CAACI,MAAV,CAAmB/5B,IAnBtD,CAqBH,CAAC,MAAQ1Z,KAAR,CAAgB,CAEjBD,OAAO,CAACqI,IAAR,CAAc,oCAAuCG,MAAM,CAACjT,IAA9C,CAAqD,IAArD,CACb,wDADa,CAC+C0K,KAAK,CAAC0zC,OADnE,CAGA,CAjCC,CAmCF,CAED;;;;;IAMAC,MAAM,CAAEprC,MAAF,CAAW,CAIhB,MAFO,MAAK2oC,IAAL,CAAU0C,GAAV,CAAerrC,MAAf,CAEP,EAFiC,KAAK2oC,IAAL,CAAU12C,GAAV,CAAe+N,MAAf,CAAuB,KAAK4oC,GAAL,EAAvB,CAEjC,CAAO,KAAKD,IAAL,CAAUv0B,GAAV,CAAepU,MAAf,CAEP,CAED;;;;;IAMAsrC,2BAA2B,CAAE59C,MAAF,CAAW,CAErC,GAAMo7C,MAAK,CAAG,KAAKA,KAAnB,CAEA,GAAKA,KAAK,CAACE,oBAAN,CAA2BqC,GAA3B,CAAgC39C,MAAhC,CAAL,CAAgD,SAIhD,OAFMqL,EAAC,CAAG,GAAIrN,8CAEd,CAAUtC,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAGhI,MAAM,CAAC0D,KAA7B,CAAoChI,CAAC,CAAGsM,EAAxC,CAA4CtM,CAAC,EAA7C,CAEC;AACA,GAAqE,IAAhE,CAAAoK,IAAI,CAAC+3C,GAAL,CAAUxyC,CAAC,CAAC5B,mBAAF,CAAuBzJ,MAAvB,CAA+BtE,CAA/B,EAAmCE,MAAnC,GAA8C,CAAxD,CAAL,CAA8E,SAI/E,QAEA,CAED;;;;;;IAOAkiD,+BAA+B,CAAE99C,MAAF,CAAW,CAEzC,GAAMo7C,MAAK,CAAG,KAAKA,KAAnB,CAEA,GAAKA,KAAK,CAACE,oBAAN,CAA2BqC,GAA3B,CAAgC39C,MAAhC,CAAL,CAAgD,MAAOo7C,MAAK,CAACE,oBAAN,CAA2B50B,GAA3B,CAAgC1mB,MAAhC,CAAP,CAKhD,OAHMuR,UAAS,CAAGvR,MAAM,CAAClB,KAAP,EAGlB,CAFMuM,CAAC,CAAG,GAAIrN,8CAEd,CAAUtC,CAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAGuJ,SAAS,CAAC7N,KAAhC,CAAuChI,CAAC,CAAGsM,EAA3C,CAA+CtM,CAAC,EAAhD,CAEC2P,CAAC,CAAC5B,mBAAF,CAAuB8H,SAAvB,CAAkC7V,CAAlC,CAFD,CAIc,CAAR,GAAA2P,CAAC,CAAC/P,CAAF,EAAqB,CAAR,GAAA+P,CAAC,CAAC9P,CAAf,EAAkC,CAAR,GAAA8P,CAAC,CAACrG,CAJlC,CAOEqG,CAAC,CAAC0yC,IAAF,CAAQ,CAAR,CAPF,CAWE1yC,CAAC,CAAClD,SAAF,EAXF,CAeCoJ,SAAS,CAACysC,MAAV,CAAkBtiD,CAAlB,CAAqB2P,CAAC,CAAC/P,CAAvB,CAA0B+P,CAAC,CAAC9P,CAA5B,CAA+B8P,CAAC,CAACrG,CAAjC,CAfD,CAqBA,MAFAo2C,MAAK,CAACE,oBAAN,CAA2B/2C,GAA3B,CAAgCvE,MAAhC,CAAwCuR,SAAxC,CAEA,CAAOA,SAEP,CAED;;;;;;IAOA0sC,qBAAqB,CAAEC,MAAF,CAAUzmC,OAAV,CAAoB,IAEpC0mC,aAAY,GAFwB,CAGlCC,YAAY,CAAG,EAHmB,EAKd,CAArB,GAAA3mC,OAAO,CAACrc,MAAR,CAAeE,CAAf,EAA+C,CAArB,GAAAmc,OAAO,CAACrc,MAAR,CAAeG,CALN,IAOvC6iD,YAAY,CAAChjD,MAAb,CAAsBqc,OAAO,CAACrc,MAAR,CAAeijD,OAAf,EAPiB,CAQvCF,YAAY,GAR2B,EAYd,CAArB,GAAA1mC,OAAO,CAAC69B,QAZ2B,GAcvC8I,YAAY,CAAC9I,QAAb,CAAwB79B,OAAO,CAAC69B,QAdO,CAevC6I,YAAY,GAf2B,GAmBd,CAArB,GAAA1mC,OAAO,CAACoQ,MAAR,CAAevsB,CAAf,EAA+C,CAArB,GAAAmc,OAAO,CAACoQ,MAAR,CAAetsB,CAnBN,IAqBvC6iD,YAAY,CAACp1C,KAAb,CAAqByO,OAAO,CAACoQ,MAAR,CAAew2B,OAAf,EArBkB,CAsBvCF,YAAY,GAtB2B,EA0BnCA,YA1BmC,GA4BvCD,MAAM,CAACX,UAAP,CAAoBW,MAAM,CAACX,UAAP,EAAqB,EA5BF,CA6BvCW,MAAM,CAACX,UAAP,uBAA+Ca,YA7BR,CA8BvC,KAAKpD,cAAL,yBA9BuC,CAkCxC,CAED;;;;IAKAsD,aAAa,CAAE5sC,MAAF,CAAW,IAEjB+R,KAAI,CAAG,KAAKA,IAFK,CAGjBk3B,OAAO,CAAG,KAAKA,OAHE,CAUvB,MALOl3B,KAAI,CAACk3B,OAKZ,GALsBl3B,IAAI,CAACk3B,OAAL,CAAe,CAAE,CAAE5N,UAAU,CAAE,CAAd,CAAF,CAKrC,EAFA4N,OAAO,CAACv+C,IAAR,CAAcsV,MAAd,CAEA,CAAO,CAEP,CAED;;;;;;;;IASA6sC,iBAAiB,CAAEhtC,SAAF,CAAaitC,aAAb,CAA4Bt0C,KAA5B,CAAmCxG,KAAnC,CAA0CyyB,MAA1C,CAAmD,CAEnE,GAAM1S,KAAI,CAAG,KAAKA,IAAlB,CAEOA,IAAI,CAACg7B,WAJuD,GAIzCh7B,IAAI,CAACg7B,WAAL,CAAmB,EAJsB,EAMnE;AAEA,GAAIC,cAAa,CAEZF,aAAa,GAAK5H,eAAe,CAACQ,aAFtB,CAIA,CAJA,CAMLoH,aAAa,GAAK5H,eAAe,CAACS,cAN7B,CAQA,CARA,CAYA,CAZjB,CAoBA,OAJMtK,WAAU,CAAGoN,mBAAmB,CAAEz2C,KAAK,CAAG6N,SAAS,CAAC8E,QAAlB,CAA6BqoC,aAA/B,CAItC,CAHMC,QAAQ,CAAG,GAAI/R,SAAJ,CAAc,GAAI8M,YAAJ,CAAiB3M,UAAjB,CAAd,CAGjB,CAFI3xC,MAAM,CAAG,CAEb,CAAUM,CAAC,CAAGwO,KAAd,CAAqBxO,CAAC,CAAGwO,KAAK,CAAGxG,KAAjC,CAAwChI,CAAC,EAAzC,CAEC,IAAM,GAEDsT,MAFC,CAAIjT,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGwV,SAAS,CAAC8E,QAA/B,CAAyCta,CAAC,EAA1C,CAEKiT,KAFL,QAI2B,CAArB,CAAAuC,SAAS,CAAC8E,QAJhB,CAQErH,KAAK,CAAGuC,SAAS,CAAC3N,KAAV,CAAiBlI,CAAC,CAAG6V,SAAS,CAAC8E,QAAd,CAAyBta,CAA1C,CARV,CAYa,CAAN,GAAAA,CAZP,CAYiBiT,KAAK,CAAGuC,SAAS,CAACpH,IAAV,CAAgBzO,CAAhB,CAZzB,CAakB,CAAN,GAAAK,CAbZ,CAasBiT,KAAK,CAAGuC,SAAS,CAACyoC,IAAV,CAAgBt+C,CAAhB,CAb9B,CAckB,CAAN,GAAAK,CAdZ,CAcsBiT,KAAK,CAAGuC,SAAS,CAAC0oC,IAAV,CAAgBv+C,CAAhB,CAd9B,CAekB,CAAN,EAAAK,CAfZ,GAesBiT,KAAK,CAAGuC,SAAS,CAAC2oC,IAAV,CAAgBx+C,CAAhB,CAf9B,EAmBM8iD,aAAa,GAAK5H,eAAe,CAACU,KAnBxC,CAqBEqH,QAAQ,CAACC,UAAT,CAAqBxjD,MAArB,CAA6B4T,KAA7B,IArBF,CAuBawvC,aAAa,GAAK5H,eAAe,CAACW,YAvB/C,CAyBEoH,QAAQ,CAACpC,SAAT,CAAoBnhD,MAApB,CAA4B4T,KAA5B,IAzBF,CA2BawvC,aAAa,GAAK5H,eAAe,CAACS,cA3B/C,CA6BEsH,QAAQ,CAACE,SAAT,CAAoBzjD,MAApB,CAA4B4T,KAA5B,IA7BF,CA+BawvC,aAAa,GAAK5H,eAAe,CAACQ,aA/B/C,EAiCEuH,QAAQ,CAACG,QAAT,CAAmB1jD,MAAnB,CAA2B4T,KAA3B,CAjCF,CAqCC5T,MAAM,EAAIsjD,aArCX,CA2CD,GAAMK,cAAa,CAAG,CAErBrtC,MAAM,CAAE,KAAK4sC,aAAL,CAAoBK,QAAQ,CAACjtC,MAA7B,CAFa,CAGrBkpC,UAAU,CAAE,KAAKA,UAHI,CAIrB7N,UAAU,CAAEA,UAJS,CAAtB,CAQK5W,MAAM,SAjFwD,GAiFvC4oB,aAAa,CAAC5oB,MAAd,CAAuBA,MAjFgB,EAmF9DA,MAAM,GAAKygB,eAAe,CAACY,YAnFmC,GAsFlEuH,aAAa,CAACC,UAAd,CAA2BztC,SAAS,CAAC8E,QAAV,CAAqBqoC,aAtFkB,EA0FnE,KAAK9D,UAAL,EAAmB7N,UA1FgD,CA4FnEtpB,IAAI,CAACg7B,WAAL,CAAiBriD,IAAjB,CAAuB2iD,aAAvB,CA5FmE,CA8FnE;AACA,GAAMlF,OAAM,CAAG,CAEdhrC,EAAE,CAAE4U,IAAI,CAACg7B,WAAL,CAAiB7iD,MAAjB,CAA0B,CAFhB,CAGdmxC,UAAU,CAAE,CAHE,CAAf,CAOA,MAAO8M,OAEP,CAED;;;;IAKAoF,sBAAsB,CAAElD,IAAF,CAAS,IAExB9F,OAAM,CAAG,IAFe,CAGxBxyB,IAAI,CAAGwyB,MAAM,CAACxyB,IAHU,CAO9B,MAFOA,KAAI,CAACg7B,WAEZ,GAF0Bh7B,IAAI,CAACg7B,WAAL,CAAmB,EAE7C,EAAO,GAAIlsB,QAAJ,CAAa,SAAWC,OAAX,CAAqB,CAExC,GAAM+Z,OAAM,CAAG,GAAIgN,OAAM,CAAC2C,UAA1B,CACA3P,MAAM,CAAC4P,iBAAP,CAA0BJ,IAA1B,CAHwC,CAIxCxP,MAAM,CAAC6P,SAAP,CAAmB,UAAY,IAExB1qC,OAAM,CAAG2oC,oBAAoB,CAAE9N,MAAM,CAACh4B,MAAT,CAFL,CAIxBwqC,aAAa,CAAG,CACrBrtC,MAAM,CAAEukC,MAAM,CAACqI,aAAP,CAAsB5sC,MAAtB,CADa,CAErBkpC,UAAU,CAAE3E,MAAM,CAAC2E,UAFE,CAGrB7N,UAAU,CAAEr7B,MAAM,CAACq7B,UAHE,CAJQ,CAU9BkJ,MAAM,CAAC2E,UAAP,EAAqBlpC,MAAM,CAACq7B,UAVE,CAW9Bva,OAAO,CAAE/O,IAAI,CAACg7B,WAAL,CAAiBriD,IAAjB,CAAuB2iD,aAAvB,EAAyC,CAA3C,CAEP,CAED,CAnBM,CAqBP,CAED;;;;;;;IAQAG,eAAe,CAAE3tC,SAAF,CAAaxY,QAAb,CAAuBmR,KAAvB,CAA8BxG,KAA9B,CAAsC,IAehD86C,cAfgD,CAE9C1lD,OAAO,CAAG,KAAKA,OAF+B,CAG9C2qB,IAAI,CAAG,KAAKA,IAHkC,CAiBpD;AACA,GAAKlS,SAAS,CAAC3N,KAAV,CAAgB8D,WAAhB,GAAgCwJ,YAArC,CAECstC,aAAa,CAAG5H,eAAe,CAACU,KAFjC,KAIO,IAAK/lC,SAAS,CAAC3N,KAAV,CAAgB8D,WAAhB,GAAgCuP,WAArC,CAENunC,aAAa,CAAG5H,eAAe,CAACW,YAF1B,KAIA,IAAKhmC,SAAS,CAAC3N,KAAV,CAAgB8D,WAAhB,GAAgCsP,WAArC,CAENwnC,aAAa,CAAG5H,eAAe,CAACS,cAF1B,KAIA,IAAK9lC,SAAS,CAAC3N,KAAV,CAAgB8D,WAAhB,GAAgCqP,UAArC,CAENynC,aAAa,CAAG5H,eAAe,CAACQ,aAF1B,KAMN,MAAM,IAAI+H,MAAJ,CAAW,iEAAX,CAAN,CAOD;AACA,GAJK,SAAAj1C,KAIL,GAJ2BA,KAAK,CAAG,CAInC,EAHK,SAAAxG,KAGL,GAH2BA,KAAK,CAAG6N,SAAS,CAAC7N,KAG7C,EAAK5K,OAAO,CAAC4iD,iBAAR,EAA6B,SAAA3iD,QAA7B,EAA0E,IAAnB,GAAAA,QAAQ,CAAC8Q,KAArE,CAAsF,IAE/E4kB,IAAG,CAAGvkB,KAAK,CAAGxG,KAFiE,CAG/E07C,IAAI,CAAGrmD,QAAQ,CAACi1B,SAAT,CAAmBtqB,KAAnB,OACV6N,SAAS,CAAC7N,KADA,CAEV3K,QAAQ,CAACi1B,SAAT,CAAmB9jB,KAAnB,CAA2BnR,QAAQ,CAACi1B,SAAT,CAAmBtqB,KALoC,CAOrFwG,KAAK,CAAGpE,IAAI,CAAC7K,GAAL,CAAUiP,KAAV,CAAiBnR,QAAQ,CAACi1B,SAAT,CAAmB9jB,KAApC,CAP6E,CAQrFxG,KAAK,CAAGoC,IAAI,CAAC3K,GAAL,CAAUszB,GAAV,CAAe2wB,IAAf,EAAwBl1C,KARqD,CAUxE,CAAR,CAAAxG,KAVgF,GAUpEA,KAAK,CAAG,CAV4D,CAYrF,CAED;AACA,GAAe,CAAV,GAAAA,KAAL,CAAmB,MAAO,KAAP,CA3DiC,GA8DhD27C,iBA9DgD,CA6D9CC,MAAM,CAAG1F,SAAS,CAAEroC,SAAF,CAAarH,KAAb,CAAoBxG,KAApB,CA7D4B,CAkE/C,SAAA3K,QAlE+C,GAoEnDsmD,gBAAgB,CAAG9tC,SAAS,GAAKxY,QAAQ,CAAC8Q,KAAvB,CAA+B+sC,eAAe,CAACa,oBAA/C,CAAsEb,eAAe,CAACY,YApEtD,KAwE9C+H,WAAU,CAAG,KAAKhB,iBAAL,CAAwBhtC,SAAxB,CAAmCitC,aAAnC,CAAkDt0C,KAAlD,CAAyDxG,KAAzD,CAAgE27C,gBAAhE,CAxEiC,CA0E9CG,WAAW,CAAG,CAEnBD,UAAU,CAAEA,UAAU,CAAC1wC,EAFJ,CAGnB+rC,UAAU,CAAE2E,UAAU,CAAC3E,UAHJ,CAInB4D,aAAa,CAAEA,aAJI,CAKnB96C,KAAK,CAAEA,KALY,CAMnBzI,GAAG,CAAEqkD,MAAM,CAACrkD,GANO,CAOnBE,GAAG,CAAEmkD,MAAM,CAACnkD,GAPO,CAQnBwL,IAAI,CA7ES,CAEb,EAAG,QAFU,CAGb,EAAG,MAHU,CAIb,EAAG,MAJU,CAKb,EAAG,MALU,CAMb,GAAI,MANS,CA6EP,CAAO4K,SAAS,CAAC8E,QAAjB,CARa,CA1EgC,CAyFpD,MAHK,KAAA9E,SAAS,CAACkuC,UAGf,GAHqCD,WAAW,CAACC,UAAZ,GAGrC,EAFOh8B,IAAI,CAACi8B,SAEZ,GAFwBj8B,IAAI,CAACi8B,SAAL,CAAiB,EAEzC,EAAOj8B,IAAI,CAACi8B,SAAL,CAAetjD,IAAf,CAAqBojD,WAArB,EAAqC,CAE5C,CAED;;;;;;IAOAG,YAAY,CAAEhoC,KAAF,CAAS8U,MAAT,CAAiBmzB,KAAjB,CAAyB,IAE9B3J,OAAM,CAAG,IAFqB,CAG9BmF,KAAK,CAAGnF,MAAM,CAACmF,KAHe,CAI9B33B,IAAI,CAAGwyB,MAAM,CAACxyB,IAJgB,CAK9B3qB,OAAO,CAAGm9C,MAAM,CAACn9C,OALa,CAM9B4hD,OAAO,CAAGzE,MAAM,CAACyE,OANa,CAQ7BU,KAAK,CAACG,MAAN,CAAaoC,GAAb,CAAkBhmC,KAAlB,CAR6B,EAQDyjC,KAAK,CAACG,MAAN,CAAah3C,GAAb,CAAkBoT,KAAlB,CAAyB,EAAzB,CARC,IAU9BkoC,aAAY,CAAGzE,KAAK,CAACG,MAAN,CAAa70B,GAAb,CAAkB/O,KAAlB,CAVe,CAW9BmoC,QAAQ,CAAGrzB,MAAM,GAAKszB,gDAAX,CAAwB,WAAxB,CAAsC,YAXnB,CAY9BnyC,GAAG,CAAGkyC,QAAQ,CAAG,SAAX,CAAuBF,KAAK,CAACxwC,QAAN,EAZC,CAcpC,GAAK,SAAAywC,YAAY,CAAEjyC,GAAF,CAAjB,CAAyC,MAAOiyC,aAAY,CAAEjyC,GAAF,CAAnB,CAElC6V,IAAI,CAAC83B,MAhBwB,GAgBf93B,IAAI,CAAC83B,MAAL,CAAc,EAhBC,EAkBpC,GAAMyE,SAAQ,CAAG,CAAEF,QAAQ,CAAEA,QAAZ,CAAjB,CAEA,GAAKhnD,OAAO,CAAC6iD,WAAb,CAA2B,CAE1B,GAAMvqB,OAAM,CAAGqpB,YAAY,CAAGA,YAAY,EAAI7tB,QAAQ,CAACC,aAAT,CAAwB,QAAxB,CAA9C,CAEAuE,MAAM,CAACtB,KAAP,CAAehqB,IAAI,CAAC3K,GAAL,CAAUwc,KAAK,CAACmY,KAAhB,CAAuBh3B,OAAO,CAAC8iD,cAA/B,CAJW,CAK1BxqB,MAAM,CAACG,MAAP,CAAgBzrB,IAAI,CAAC3K,GAAL,CAAUwc,KAAK,CAAC4Z,MAAhB,CAAwBz4B,OAAO,CAAC8iD,cAAhC,CALU,CAO1B,GAAMhpB,IAAG,CAAGxB,MAAM,CAACyB,UAAP,CAAmB,IAAnB,CAAZ,CASA,GAPK,KAAA+sB,KAOL,GALChtB,GAAG,CAAC9pB,SAAJ,CAAe,CAAf,CAAkBsoB,MAAM,CAACG,MAAzB,CAKD,CAJCqB,GAAG,CAAC5pB,KAAJ,CAAW,CAAX,CAAc,CAAE,CAAhB,CAID,EAAmC,WAA5B,QAAOi3C,iBAAP,EAA2CtoC,KAAK,WAAYsoC,iBAA9D,EAC2B,WAA7B,QAAOC,kBAAP,EAA4CvoC,KAAK,WAAYuoC,kBAD3D,EAEyB,WAA3B,QAAOC,gBAAP,EAA0CxoC,KAAK,WAAYwoC,gBAFzD,EAGqB,WAAvB,QAAOC,YAAP,EAAsCzoC,KAAK,WAAYyoC,YAH1D,CAKCxtB,GAAG,CAACE,SAAJ,CAAenb,KAAf,CAAsB,CAAtB,CAAyB,CAAzB,CAA4ByZ,MAAM,CAACtB,KAAnC,CAA0CsB,MAAM,CAACG,MAAjD,CALD,KAOO,CAED9E,MAAM,GAAKszB,gDAAX,EAAyBtzB,MAAM,GAAKC,+CAFnC,EAIL5iB,OAAO,CAACC,KAAR,CAAe,wDAAf,CAJK,EAQD4N,KAAK,CAACmY,KAAN,CAAch3B,OAAO,CAAC8iD,cAAtB,EAAwCjkC,KAAK,CAAC4Z,MAAN,CAAez4B,OAAO,CAAC8iD,cAR9D,GAUL9xC,OAAO,CAACqI,IAAR,CAAc,wDAAd,CAAwEwF,KAAxE,CAVK,CAcN,GAAM9H,KAAI,CAAG,GAAIwwC,kBAAJ,CAAoD,CAA7B,EAAA1oC,KAAK,CAAC4Z,MAAN,CAAe5Z,KAAK,CAACmY,KAArB,CAAvB,CAAb,CAEA,GAAKrD,MAAM,GAAKszB,gDAAhB,CAEC,IAAM,GAAIrkD,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGmU,IAAI,CAACjU,MAA1B,CAAkCF,CAAC,EAAI,CAAvC,CAECmU,IAAI,CAAEnU,CAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYnU,CAAC,CAAG,CAAhB,CAFjB,CAGCmU,IAAI,CAAEnU,CAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYnU,CAAC,CAAG,CAAhB,CAHjB,CAICmU,IAAI,CAAEnU,CAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYnU,CAAC,CAAG,CAAhB,CAJjB,CAKCmU,IAAI,CAAEnU,CAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYnU,CAAC,CAAG,CAAhB,CALjB,CAFD,IAaC,KAAM,GAAIA,GAAC,CAAG,CAAR,CAAW0M,CAAC,CAAG,CAArB,CAAwB1M,EAAC,CAAGmU,IAAI,CAACjU,MAAjC,CAAyCF,EAAC,EAAI,CAAL,CAAQ0M,CAAC,EAAI,CAAtD,CAECyH,IAAI,CAAEnU,EAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYzH,CAAC,CAAG,CAAhB,CAFjB,CAGCyH,IAAI,CAAEnU,EAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYzH,CAAC,CAAG,CAAhB,CAHjB,CAICyH,IAAI,CAAEnU,EAAC,CAAG,CAAN,CAAJ,CAAgBic,KAAK,CAAC9H,IAAN,CAAYzH,CAAC,CAAG,CAAhB,CAJjB,CAKCyH,IAAI,CAAEnU,EAAC,CAAG,CAAN,CAAJ,CAAgB,GALjB,CAWDk3B,GAAG,CAAC0tB,YAAJ,CAAkB,GAAIC,UAAJ,CAAe1wC,IAAf,CAAqB8H,KAAK,CAACmY,KAA3B,CAAkCnY,KAAK,CAAC4Z,MAAxC,CAAlB,CAAoE,CAApE,CAAuE,CAAvE,CAEA,CAEI,KAAAz4B,OAAO,CAACssC,MAnEa,CAqEzBsV,OAAO,CAACt+C,IAAR,CAAc,GAAIm2B,QAAJ,CAAa,SAAWC,OAAX,CAAqB,CAE/CpB,MAAM,CAACovB,MAAP,CAAe,SAAWzE,IAAX,CAAkB,CAEhC9F,MAAM,CAACgJ,sBAAP,CAA+BlD,IAA/B,EAAsC7U,IAAtC,CAA4C,SAAWuZ,eAAX,CAA6B,CAExET,QAAQ,CAACT,UAAT,CAAsBkB,eAFkD,CAGxEjuB,OAAO,EAEP,CALD,CAOA,CATD,CASGstB,QATH,CAWA,CAba,CAAd,CArEyB,CAsFzBE,QAAQ,CAAC9C,GAAT,CAAe9rB,MAAM,CAACsvB,SAAP,CAAkBZ,QAAlB,CAIhB,CA1FD,IA4FCE,SAAQ,CAAC9C,GAAT,CAAevlC,KAAK,CAACH,GA5FtB,CAgGA,GAAM3N,MAAK,CAAG4Z,IAAI,CAAC83B,MAAL,CAAYn/C,IAAZ,CAAkB4jD,QAAlB,EAA+B,CAA7C,CAEA,MADAH,aAAY,CAAEjyC,GAAF,CAAZ,CAAsB/D,KACtB,CAAOA,KAEP,CAED;;;;IAKA82C,cAAc,CAAEhmD,GAAF,CAAQ,CAErB,GAAM8oB,KAAI,CAAG,KAAKA,IAAlB,CAEOA,IAAI,CAACm9B,QAJS,GAIEn9B,IAAI,CAACm9B,QAAL,CAAgB,EAJlB,EAMrB,GAAMC,WAAU,CAAG,CAClBr0B,SAAS,CAAE2rB,cAAc,CAAEx9C,GAAG,CAAC6xB,SAAN,CADP,CAElBF,SAAS,CAAE6rB,cAAc,CAAEx9C,GAAG,CAAC2xB,SAAN,CAFP,CAGlBrE,KAAK,CAAEkwB,cAAc,CAAEx9C,GAAG,CAACstB,KAAN,CAHH,CAIlBE,KAAK,CAAEgwB,cAAc,CAAEx9C,GAAG,CAACwtB,KAAN,CAJH,CAAnB,CAOA,MAAO1E,KAAI,CAACm9B,QAAL,CAAcxkD,IAAd,CAAoBykD,UAApB,EAAmC,CAE1C,CAED;;;;IAKAC,cAAc,CAAEnmD,GAAF,CAAQ,IAEfygD,MAAK,CAAG,KAAKA,KAFE,CAGf33B,IAAI,CAAG,KAAKA,IAHG,CAKrB,GAAK23B,KAAK,CAAC/yB,QAAN,CAAes1B,GAAf,CAAoBhjD,GAApB,CAAL,CAAiC,MAAOygD,MAAK,CAAC/yB,QAAN,CAAe3B,GAAf,CAAoB/rB,GAApB,CAAP,CAE1B8oB,IAAI,CAAC4E,QAPS,GAOE5E,IAAI,CAAC4E,QAAL,CAAgB,EAPlB,EASrB,GAAM04B,WAAU,CAAG,CAClBC,OAAO,CAAE,KAAKL,cAAL,CAAqBhmD,GAArB,CADS,CAElB6V,MAAM,CAAE,KAAKmvC,YAAL,CAAmBhlD,GAAG,CAACgd,KAAvB,CAA8Bhd,GAAG,CAAC8xB,MAAlC,CAA0C9xB,GAAG,CAACilD,KAA9C,CAFU,CAAnB,CAKKjlD,GAAG,CAAC0E,IAdY,GAcL0hD,UAAU,CAAC1hD,IAAX,CAAkB1E,GAAG,CAAC0E,IAdjB,EAgBrB,KAAK4hD,UAAL,CAAiB,SAAWC,GAAX,CAAiB,CAEjCA,GAAG,CAACC,YAAJ,EAAoBD,GAAG,CAACC,YAAJ,CAAkBxmD,GAAlB,CAAuBomD,UAAvB,CAEpB,CAJD,CAhBqB,CAsBrB,GAAMl3C,MAAK,CAAG4Z,IAAI,CAAC4E,QAAL,CAAcjsB,IAAd,CAAoB2kD,UAApB,EAAmC,CAAjD,CAEA,MADA3F,MAAK,CAAC/yB,QAAN,CAAe9jB,GAAf,CAAoB5J,GAApB,CAAyBkP,KAAzB,CACA,CAAOA,KAEP,CAED;;;;IAKAu3C,eAAe,CAAEhoD,QAAF,CAAa,IAErBgiD,MAAK,CAAG,KAAKA,KAFQ,CAGrB33B,IAAI,CAAG,KAAKA,IAHS,CAK3B,GAAK23B,KAAK,CAACx9B,SAAN,CAAgB+/B,GAAhB,CAAqBvkD,QAArB,CAAL,CAAuC,MAAOgiD,MAAK,CAACx9B,SAAN,CAAgB8I,GAAhB,CAAqBttB,QAArB,CAAP,CAEvC,GAAKA,QAAQ,CAACioD,gBAAd,CAGC,MADAv3C,QAAO,CAACqI,IAAR,CAAc,mDAAd,CACA,CAAO,IAAP,CAIMsR,IAAI,CAAC7F,SAde,GAcH6F,IAAI,CAAC7F,SAAL,CAAiB,EAdd,EAgB3B;AACA,GAAM0jC,YAAW,CAAG,CAAEC,oBAAoB,CAAE,EAAxB,CAApB,CAEK,KAAAnoD,QAAQ,CAACooD,sBAAT,EAA4C,KAAApoD,QAAQ,CAACqoD,mBAnB/B,EAqB1B33C,OAAO,CAACqI,IAAR,CAAc,+EAAd,CArB0B,CAyB3B;AACA,GAAMvY,MAAK,CAAGR,QAAQ,CAACQ,KAAT,CAAeykD,OAAf,GAAyBz4B,MAAzB,CAAiC,CAAExsB,QAAQ,CAACD,OAAX,CAAjC,CAAd,CAoBA;AACA,GAnBO8/C,UAAU,CAAEr/C,KAAF,CAAS,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAW,CAAX,CAAT,CAmBjB,GAjBC0nD,WAAW,CAACC,oBAAZ,CAAiCG,eAAjC,CAAmD9nD,KAiBpD,EAbKR,QAAQ,CAACooD,sBAad,EAXCF,WAAW,CAACC,oBAAZ,CAAiCI,cAAjC,CAAkDvoD,QAAQ,CAACwoD,SAW5D,CAVCN,WAAW,CAACC,oBAAZ,CAAiCM,eAAjC,CAAmDzoD,QAAQ,CAAC0oD,SAU7D,GANCR,WAAW,CAACC,oBAAZ,CAAiCI,cAAjC,CAAkD,EAMnD,CALCL,WAAW,CAACC,oBAAZ,CAAiCM,eAAjC,CAAmD,EAKpD,EAAKzoD,QAAQ,CAACyxB,YAAT,EAAyBzxB,QAAQ,CAAC8xB,YAAvC,CAEC,GAAK9xB,QAAQ,CAACyxB,YAAT,GAA0BzxB,QAAQ,CAAC8xB,YAAxC,CAAuD,CAEtD,GAAM62B,iBAAgB,CAAG,CAAEl4C,KAAK,CAAE,KAAKi3C,cAAL,CAAqB1nD,QAAQ,CAACyxB,YAA9B,CAAT,CAAzB,CACA,KAAKozB,qBAAL,CAA4B8D,gBAA5B,CAA8C3oD,QAAQ,CAACyxB,YAAvD,CAHsD,CAItDy2B,WAAW,CAACC,oBAAZ,CAAiCS,wBAAjC,CAA4DD,gBAE5D,CAND,IAQCj4C,QAAO,CAACqI,IAAR,CAAc,mGAAd,CARD,CAcD;AACA,GAAK/Y,QAAQ,CAACuB,GAAd,CAAoB,CAEnB,GAAMsnD,gBAAe,CAAG,CAAEp4C,KAAK,CAAE,KAAKi3C,cAAL,CAAqB1nD,QAAQ,CAACuB,GAA9B,CAAT,CAAxB,CACA,KAAKsjD,qBAAL,CAA4BgE,eAA5B,CAA6C7oD,QAAQ,CAACuB,GAAtD,CAHmB,CAInB2mD,WAAW,CAACC,oBAAZ,CAAiCW,gBAAjC,CAAoDD,eAEpD,CAED,GAAK7oD,QAAQ,CAACovB,QAAd,CAAyB,CAExB;AAFwB,GAGlBA,SAAQ,CAAGpvB,QAAQ,CAACovB,QAAT,CAAkB1pB,KAAlB,GAA0BmF,cAA1B,CAA0C7K,QAAQ,CAAC+oD,iBAAnD,CAHO,CAIlBC,oBAAoB,CAAGt8C,IAAI,CAAC7K,GAAL,CAAUutB,QAAQ,CAACjZ,CAAnB,CAAsBiZ,QAAQ,CAAChZ,CAA/B,CAAkCgZ,QAAQ,CAACvsB,CAA3C,CAJL,CAoBxB;AACA,GAf4B,CAAvB,CAAAmmD,oBAeL,GAbC55B,QAAQ,CAACvkB,cAAT,CAAyB,EAAIm+C,oBAA7B,CAaD,CAXCt4C,OAAO,CAACqI,IAAR,CAAc,kFAAd,CAWD,EAP4B,CAAvB,CAAAiwC,oBAOL,GALCd,WAAW,CAACe,cAAZ,CAA6B75B,QAAQ,CAAC61B,OAAT,EAK9B,EAAKjlD,QAAQ,CAACyvB,WAAd,CAA4B,CAE3B,GAAMy5B,eAAc,CAAG,CAAEz4C,KAAK,CAAE,KAAKi3C,cAAL,CAAqB1nD,QAAQ,CAACyvB,WAA9B,CAAT,CAAvB,CACA,KAAKo1B,qBAAL,CAA4BqE,cAA5B,CAA4ClpD,QAAQ,CAACyvB,WAArD,CAH2B,CAI3By4B,WAAW,CAACiB,eAAZ,CAA8BD,cAE9B,CAED,CAED;AACA,GAAKlpD,QAAQ,CAAC8wB,SAAd,CAA0B,CAEzB,GAAMs4B,aAAY,CAAG,CAAE34C,KAAK,CAAE,KAAKi3C,cAAL,CAAqB1nD,QAAQ,CAAC8wB,SAA9B,CAAT,CAArB,CAEK9wB,QAAQ,CAACmxB,WAAT,EAAmD,CAAE,CAA7B,GAAAnxB,QAAQ,CAACmxB,WAAT,CAAqBjvB,CAJzB,GAMnBlC,QAAQ,CAACmxB,WAAT,CAAqBjvB,CAArB,GAA2BlC,QAAQ,CAACmxB,WAAT,CAAqBhvB,CAN7B,EAQvBuO,OAAO,CAACqI,IAAR,CAAc,wFAAd,CARuB,CAYxBqwC,YAAY,CAACx5C,KAAb,CAAqB5P,QAAQ,CAACmxB,WAAT,CAAqBjvB,CAZlB,EAgBzB,KAAK2iD,qBAAL,CAA4BuE,YAA5B,CAA0CppD,QAAQ,CAAC8wB,SAAnD,CAhByB,CAiBzBo3B,WAAW,CAACmB,aAAZ,CAA4BD,YAE5B,CAED;AACA,GAAKppD,QAAQ,CAACmwB,KAAd,CAAsB,CAErB,GAAMm5B,gBAAe,CAAG,CACvB74C,KAAK,CAAE,KAAKi3C,cAAL,CAAqB1nD,QAAQ,CAACmwB,KAA9B,CADgB,CAEvBo5B,QAAQ,CAAE,CAFa,CAAxB,CAKiC,CAA5B,GAAAvpD,QAAQ,CAACwpD,cAPO,GASpBF,eAAe,CAACG,QAAhB,CAA2BzpD,QAAQ,CAACwpD,cAThB,EAarB,KAAK3E,qBAAL,CAA4ByE,eAA5B,CAA6CtpD,QAAQ,CAACmwB,KAAtD,CAbqB,CAcrB+3B,WAAW,CAACwB,gBAAZ,CAA+BJ,eAE/B,CAED;AACKtpD,QAAQ,CAACW,WAjJa,CAmJ1BunD,WAAW,CAACyB,SAAZ,CAAwB,OAnJE,CAuJA,CAArB,CAAA3pD,QAAQ,CAACif,SAvJY,GAyJzBipC,WAAW,CAACyB,SAAZ,CAAwB,MAzJC,CA0JzBzB,WAAW,CAAC0B,WAAZ,CAA0B5pD,QAAQ,CAACif,SA1JV,EAiKtBjf,QAAQ,CAACY,IAAT,GAAkBC,gDAjKI,GAiKSqnD,WAAW,CAAC2B,WAAZ,GAjKT,EAkKJ,EAAlB,GAAA7pD,QAAQ,CAACiG,IAlKa,GAkKCiiD,WAAW,CAACjiD,IAAZ,CAAmBjG,QAAQ,CAACiG,IAlK7B,EAoK3B,KAAK89C,iBAAL,CAAwB/jD,QAAxB,CAAkCkoD,WAAlC,CApK2B,CAsK3B,KAAKL,UAAL,CAAiB,SAAWC,GAAX,CAAiB,CAEjCA,GAAG,CAACgC,aAAJ,EAAqBhC,GAAG,CAACgC,aAAJ,CAAmB9pD,QAAnB,CAA6BkoD,WAA7B,CAErB,CAJD,CAtK2B,CA4K3B,GAAMz3C,MAAK,CAAG4Z,IAAI,CAAC7F,SAAL,CAAexhB,IAAf,CAAqBklD,WAArB,EAAqC,CAAnD,CAEA,MADAlG,MAAK,CAACx9B,SAAN,CAAgBrZ,GAAhB,CAAqBnL,QAArB,CAA+ByQ,KAA/B,CACA,CAAOA,KAEP,CAED;;;;IAKAs5C,WAAW,CAAEvoD,IAAF,CAAS,IAEbwgD,MAAK,CAAG,KAAKA,KAFA,CAGb33B,IAAI,CAAG,KAAKA,IAHC,CAKb2/B,iBAAiB,CAAG,CAAExoD,IAAI,CAAC7B,QAAL,CAAcqF,IAAhB,CALP,CAOnB,GAAKgN,KAAK,CAAC8H,OAAN,CAAetY,IAAI,CAACxB,QAApB,CAAL,CAEC,IAAM,GAAIsC,EAAC,CAAG,CAAR,CAAW4S,CAAC,CAAG1T,IAAI,CAACxB,QAAL,CAAcwC,MAAnC,CAA2CF,CAAC,CAAG4S,CAA/C,CAAkD5S,CAAC,EAAnD,CAEC0nD,iBAAiB,CAAChnD,IAAlB,CAAwBxB,IAAI,CAACxB,QAAL,CAAesC,CAAf,EAAmB0C,IAA3C,EAJF,IAUCglD,kBAAiB,CAAChnD,IAAlB,CAAwBxB,IAAI,CAACxB,QAAL,CAAcgF,IAAtC,CAVD,CAcA,GAAMilD,aAAY,CAAGD,iBAAiB,CAACrqC,IAAlB,CAAwB,GAAxB,CAArB,CAEA,GAAKqiC,KAAK,CAACC,MAAN,CAAasC,GAAb,CAAkB0F,YAAlB,CAAL,CAAwC,MAAOjI,MAAK,CAACC,MAAN,CAAa30B,GAAb,CAAkB28B,YAAlB,CAAP,CAvBrB,GA0BfC,KA1Be,CAyBbvqD,QAAQ,CAAG6B,IAAI,CAAC7B,QAzBH,CAmDnB,GApBCuqD,IAoBD,CAtBK1oD,IAAI,CAACu1B,cAsBV,CApBQymB,eAAe,CAACE,KAoBxB,CAlBYl8C,IAAI,CAAC2oD,UAkBjB,CAhBQ3M,eAAe,CAACG,SAgBxB,CAdYn8C,IAAI,CAAC4X,MAcjB,CAZQokC,eAAe,CAACI,UAYxB,CAVYp8C,IAAI,CAAC2X,QAUjB,CARQqkC,eAAe,CAACC,MAQxB,CAJQj8C,IAAI,CAACxB,QAAL,CAAcmD,SAAd,CAA0Bq6C,eAAe,CAACE,KAA1C,CAAkDF,eAAe,CAACK,SAI1E,CAAK,KAAAl+C,QAAQ,CAACu1B,gBAAd,CAEC,KAAM,IAAI6wB,MAAJ,CAAW,mEAAX,CAAN,CArDkB,GAyDbqE,QAAO,CAAG,EAzDG,CA0Db7pD,UAAU,CAAG,EA1DA,CA2Db8pD,UAAU,CAAG,EA3DA,CA4DbC,OAAO,CAAG,EA5DG,CA+DbC,cAAc,CAAG,CACtBh6C,EAAE,CAAE,YADkB,CAEtBC,GAAG,CAAE,YAFiB,CAGtBhQ,KAAK,CAAE,SAHe,CAItBgqD,UAAU,CAAE,WAJU,CAKtBC,SAAS,CAAE,UALW,CA/DJ,CAuEbC,cAAc,CAAG/qD,QAAQ,CAAC2H,YAAT,CAAuB,QAAvB,CAvEJ,CAyEd,SAAAojD,cAAc,EAAoB,KAAKlG,2BAAL,CAAkCkG,cAAlC,CAzEpB,GA2ElBh6C,OAAO,CAACqI,IAAR,CAAc,uFAAd,CA3EkB,CA6ElBpZ,QAAQ,CAAC0H,YAAT,CAAuB,QAAvB,CAAiC,KAAKq9C,+BAAL,CAAsCgG,cAAtC,CAAjC,CA7EkB,EAiFnB;AACA;AACA,GAAIC,kBAAiB,CAAG,IAAxB,CAEA,IAAM,GAAIC,cAAV,GAA2BjrD,SAAQ,CAACY,UAApC,CAEC;AACA,GAAsC,OAAjC,GAAAqqD,aAAa,CAACzQ,MAAd,CAAsB,CAAtB,CAAyB,CAAzB,CAAL,EAEA,GAAMhiC,UAAS,CAAGxY,QAAQ,CAACY,UAAT,CAAqBqqD,aAArB,CAAlB,CACAA,aAAa,CAAGL,cAAc,CAAEK,aAAF,CAAd,EAAmCA,aAAa,CAACC,WAAd,EAHnD,CAKA;AACA;AACA,GAAMC,sBAAqB,CACzB,2EADF,CAKA,GAFOA,qBAAqB,CAAC1wC,IAAtB,CAA4BwwC,aAA5B,CAEP,GAFqDA,aAAa,CAAG,IAAMA,aAE3E,EAAK5I,KAAK,CAACzhD,UAAN,CAAiBgkD,GAAjB,CAAsB,KAAKD,MAAL,CAAansC,SAAb,CAAtB,CAAL,CAAwD,CAEvD5X,UAAU,CAAEqqD,aAAF,CAAV,CAA8B5I,KAAK,CAACzhD,UAAN,CAAiB+sB,GAAjB,CAAsB,KAAKg3B,MAAL,CAAansC,SAAb,CAAtB,CAFyB,CAGvD,QAEA,CAED;AACAwyC,iBAAiB,CAAG,IApBpB,CAqBA,GAAMngD,MAAK,CAAG2N,SAAS,CAAC3N,KAAxB,CAEuB,UAAlB,GAAAogD,aAAa,EACbpgD,KAAK,WAAYoT,YADjB,EAEApT,KAAK,WAAYmT,WAzBtB,GA2BCjN,OAAO,CAACqI,IAAR,CAAc,yEAAd,CA3BD,CA4BC4xC,iBAAiB,CAAG,GAAI5yC,sDAAJ,CAAqB,GAAI6F,YAAJ,CAAiBpT,KAAjB,CAArB,CAA+C2N,SAAS,CAAC8E,QAAzD,CAAmE9E,SAAS,CAACkuC,UAA7E,CA5BrB,EAgCA,GAAM0E,SAAQ,CAAG,KAAKjF,eAAL,CAAsB6E,iBAAiB,EAAIxyC,SAA3C,CAAsDxY,QAAtD,CAAjB,CAEkB,IAAb,GAAAorD,QAlCL,GAoCCxqD,UAAU,CAAEqqD,aAAF,CAAV,CAA8BG,QApC/B,CAqCC/I,KAAK,CAACzhD,UAAN,CAAiB4K,GAAjB,CAAsB,KAAKm5C,MAAL,CAAansC,SAAb,CAAtB,CAAgD4yC,QAAhD,CArCD,EA6CD;AACA,GAHK,SAAAL,cAGL,EAHoC/qD,QAAQ,CAAC0H,YAAT,CAAuB,QAAvB,CAAiCqjD,cAAjC,CAGpC,CAA0C,CAArC,GAAArnD,MAAM,CAACkZ,IAAP,CAAahc,UAAb,EAA0BiC,MAA/B,CAA8C,MAAO,KAAP,CAE9C;AACA,GAAK,SAAAhB,IAAI,CAACyG,qBAAL,EAAgF,CAApC,CAAAzG,IAAI,CAACyG,qBAAL,CAA2BzF,MAA5E,CAAyF,IAElFwoD,QAAO,CAAG,EAFwE,CAGlFC,WAAW,CAAG,EAHoE,CAIlFC,iBAAiB,CAAG,EAJ8D,CAMxF,GAAK,SAAA1pD,IAAI,CAACg0B,qBAAV,CAEC,IAAM,GAAMhhB,IAAZ,GAAmBhT,KAAI,CAACg0B,qBAAxB,CAEC01B,iBAAiB,CAAE1pD,IAAI,CAACg0B,qBAAL,CAA4BhhB,GAA5B,CAAF,CAAjB,CAAyDA,GAAzD,CAMF,IAAM,GAAIlS,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAGd,IAAI,CAACyG,qBAAL,CAA2BzF,MAAhD,CAAwD,EAAGF,GAA3D,CAA+D,IAExDy6B,OAAM,CAAG,EAF+C,CAG1DouB,MAAM,GAHoD,CAK9D,IAAM,GAAMP,eAAZ,GAA6BjrD,SAAQ,CAACqB,eAAtC,CAAwD,CAGvD;AACA;AAEA,GAAuB,UAAlB,EAAA4pD,cAAa,EAAqC,QAAlB,GAAAA,cAAhC,EAAgF,OAAlB,GAAAA,cAAnE,CAA+F,CAEvFO,MAFuF,GAI7Fz6C,OAAO,CAACqI,IAAR,CAAc,6DAAd,CAJ6F,CAK7FoyC,MAAM,GALuF,EAS9F,QAEA,CAjBsD,GAmBjDhzC,WAAS,CAAGxY,QAAQ,CAACqB,eAAT,CAA0B4pD,cAA1B,EAA2CtoD,GAA3C,CAnBqC,CAoBnD8oD,iBAAiB,CAAGR,cAAa,CAACC,WAAd,EApB+B,CAsB7CN,cAAc,CAAEK,cAAF,CAtB+B,GAwBhDQ,iBAAiB,CAAGb,cAAc,CAAEK,cAAF,CAxBc,EA4BvD;AACA;AACA;AACA;AAEA,GAAMS,cAAa,CAAG1rD,QAAQ,CAACY,UAAT,CAAqBqqD,cAArB,CAAtB,CAEA,GAAK5I,KAAK,CAACzhD,UAAN,CAAiBgkD,GAAjB,CAAsB,KAAKD,MAAL,CAAansC,UAAb,CAAtB,CAAL,CAAwD,CAEvD4kB,MAAM,CAAEquB,iBAAF,CAAN,CAA8BpJ,KAAK,CAACzhD,UAAN,CAAiB+sB,GAAjB,CAAsB,KAAKg3B,MAAL,CAAansC,UAAb,CAAtB,CAFyB,CAGvD,QAEA,CAED;AACA,GAAMmzC,kBAAiB,CAAGD,aAAa,CAAC3lD,KAAd,EAA1B,CAEA,GAAK,CAAE/F,QAAQ,CAAC4rD,oBAAhB,CAEO,GAAIF,aAAJ,CAEE,IAAM,GAAIr8C,EAAC,CAAG,CAAR,CAAWC,EAAE,CAAGkJ,UAAS,CAAC7N,KAAhC,CAAuC0E,CAAC,CAAGC,EAA3C,CAA+CD,CAAC,EAAhD,CAEMq8C,aAAa,CAAC/gD,KAAd,CAAuB0E,CAF7B,EAIIs8C,iBAAiB,CAAC1G,MAAlB,CACE51C,CADF,CAEEmJ,UAAS,CAACpH,IAAV,CAAgB/B,CAAhB,EAAsBq8C,aAAa,CAACt6C,IAAd,CAAoB/B,CAApB,CAFxB,CAGEmJ,UAAS,CAACyoC,IAAV,CAAgB5xC,CAAhB,EAAsBq8C,aAAa,CAACzK,IAAd,CAAoB5xC,CAApB,CAHxB,CAIEmJ,UAAS,CAAC0oC,IAAV,CAAgB7xC,CAAhB,EAAsBq8C,aAAa,CAACxK,IAAd,CAAoB7xC,CAApB,CAJxB,CAJJ,CAFF,IAmBE,KAAM,GAAIA,GAAC,CAAG,CAAR,CAAWC,GAAE,CAAGkJ,UAAS,CAAC7N,KAAhC,CAAuC0E,EAAC,CAAGC,GAA3C,CAA+CD,EAAC,EAAhD,CAEEs8C,iBAAiB,CAAC1G,MAAlB,CACE51C,EADF,CAEE,CAFF,CAGE,CAHF,CAIE,CAJF,EAaX+tB,MAAM,CAAEquB,iBAAF,CAAN,CAA8B,KAAKtF,eAAL,CAAsBwF,iBAAtB,CAAyC3rD,QAAzC,CAjFyB,CAkFvDqiD,KAAK,CAACzhD,UAAN,CAAiB4K,GAAjB,CAAsB,KAAKm5C,MAAL,CAAa+G,aAAb,CAAtB,CAAoDtuB,MAAM,CAAEquB,iBAAF,CAA1D,CAEA,CAEDd,OAAO,CAACtnD,IAAR,CAAc+5B,MAAd,CA3F8D,CA6F9DiuB,OAAO,CAAChoD,IAAR,CAAcxB,IAAI,CAACyG,qBAAL,CAA4B3F,GAA5B,CAAd,CA7F8D,CA+FzD,SAAAd,IAAI,CAACg0B,qBA/FoD,EA+Fdy1B,WAAW,CAACjoD,IAAZ,CAAkBkoD,iBAAiB,CAAE5oD,GAAF,CAAnC,CAEhD,CAED8nD,OAAO,CAACY,OAAR,CAAkBA,OAnHsE,CAqH9D,CAArB,CAAAC,WAAW,CAACzoD,MArHuE,GAuHvF4nD,OAAO,CAAChG,MAAR,CAAiB,EAvHsE,CAwHvFgG,OAAO,CAAChG,MAAR,CAAe6G,WAAf,CAA6BA,WAxH0D,CA4HxF,CAED,GAAMO,gBAAe,CAAGx5C,KAAK,CAAC8H,OAAN,CAAetY,IAAI,CAACxB,QAApB,CAAxB,CAEA,GAAKwrD,eAAe,EAA+B,CAA3B,GAAA7rD,QAAQ,CAACiR,MAAT,CAAgBpO,MAAxC,CAAuD,MAAO,KAAP,CAKvD,OAEO4uC,UAFP,CAHM5sB,SAAS,CAAGgnC,eAAe,CAAGhqD,IAAI,CAACxB,QAAR,CAAmB,CAAEwB,IAAI,CAACxB,QAAP,CAGpD,CAFM4Q,MAAM,CAAG46C,eAAe,CAAG7rD,QAAQ,CAACiR,MAAZ,CAAqB,CAAE,CAAET,aAAa,CAAE,CAAjB,CAAoBW,KAAK,OAAzB,CAAsCxG,KAAK,OAA3C,CAAF,CAEnD,CAAUhI,GAAC,CAAG,CAAd,CAAiBsM,EAAE,CAAGgC,MAAM,CAACpO,MAA7B,CAAqCF,GAAC,CAAGsM,EAAzC,CAA6CtM,GAAC,EAA9C,CAAoD,CAWnD,GATM8uC,SASN,CATkB,CACjB8Y,IAAI,CAAEA,IADW,CAEjB3pD,UAAU,CAAEA,UAFK,CASlB,CAJA,KAAKwjD,iBAAL,CAAwBpkD,QAAxB,CAAkCyxC,SAAlC,CAIA,CAFsB,CAAjB,CAAAkZ,OAAO,CAAC9nD,MAEb,GAF0B4uC,SAAS,CAACkZ,OAAV,CAAoBA,OAE9C,EAAwB,IAAnB,GAAA3qD,QAAQ,CAAC8Q,KAAd,CAA+B,CAE9B,GAAIg7C,SAAQ,CAAG,KAAKnH,MAAL,CAAa3kD,QAAQ,CAAC8Q,KAAtB,CAAf,CAF8B,CAIzB,SAAAG,MAAM,CAAEtO,GAAF,CAAN,CAAYwO,KAAZ,EAAmC,SAAAF,MAAM,CAAEtO,GAAF,CAAN,CAAYgI,KAJtB,IAM7BmhD,QAAQ,EAAI,IAAM76C,MAAM,CAAEtO,GAAF,CAAN,CAAYwO,KAAlB,CAA0B,GAA1B,CAAgCF,MAAM,CAAEtO,GAAF,CAAN,CAAYgI,KAN3B,EAUzB03C,KAAK,CAACzhD,UAAN,CAAiBgkD,GAAjB,CAAsBkH,QAAtB,CAVyB,CAY7Bra,SAAS,CAACz8B,OAAV,CAAoBqtC,KAAK,CAACzhD,UAAN,CAAiB+sB,GAAjB,CAAsBm+B,QAAtB,CAZS,EAgB7Bra,SAAS,CAACz8B,OAAV,CAAoB,KAAKmxC,eAAL,CAAsBnmD,QAAQ,CAAC8Q,KAA/B,CAAsC9Q,QAAtC,CAAgDiR,MAAM,CAAEtO,GAAF,CAAN,CAAYwO,KAA5D,CAAmEF,MAAM,CAAEtO,GAAF,CAAN,CAAYgI,KAA/E,CAhBS,CAiB7B03C,KAAK,CAACzhD,UAAN,CAAiB4K,GAAjB,CAAsBsgD,QAAtB,CAAgCra,SAAS,CAACz8B,OAA1C,CAjB6B,EAqBH,IAAtB,GAAAy8B,SAAS,CAACz8B,OArBe,EAqBI,MAAOy8B,UAAS,CAACz8B,OAEnD,CAED,GAAM3U,SAAQ,CAAG,KAAKgoD,eAAL,CAAsBxjC,SAAS,CAAE5T,MAAM,CAAEtO,GAAF,CAAN,CAAY6N,aAAd,CAA/B,CAAjB,CAEkB,IAAb,GAAAnQ,QAtC8C,GAsC1BoxC,SAAS,CAACpxC,QAAV,CAAqBA,QAtCK,EAwCnDqqD,UAAU,CAACrnD,IAAX,CAAiBouC,SAAjB,CAEA,CAEDgZ,OAAO,CAACC,UAAR,CAAqBA,UA1TF,CA4TZhgC,IAAI,CAAC43B,MA5TO,GA4TE53B,IAAI,CAAC43B,MAAL,CAAc,EA5ThB,EA8TnB,KAAK4F,UAAL,CAAiB,SAAWC,GAAX,CAAiB,CAEjCA,GAAG,CAAC4D,SAAJ,EAAiB5D,GAAG,CAAC4D,SAAJ,CAAelqD,IAAf,CAAqB4oD,OAArB,CAEjB,CAJD,CA9TmB,CAoUnB,GAAM35C,MAAK,CAAG4Z,IAAI,CAAC43B,MAAL,CAAYj/C,IAAZ,CAAkBonD,OAAlB,EAA8B,CAA5C,CAEA,MADApI,MAAK,CAACC,MAAN,CAAa92C,GAAb,CAAkB8+C,YAAlB,CAAgCx5C,KAAhC,CACA,CAAOA,KAEP,CAED;;;;IAKAk7C,aAAa,CAAE9/C,MAAF,CAAW,CAEvB,GAAMwe,KAAI,CAAG,KAAKA,IAAlB,CAEOA,IAAI,CAACuhC,OAJW,GAIDvhC,IAAI,CAACuhC,OAAL,CAAe,EAJd,KAMjBC,QAAO,CAAGhgD,MAAM,CAACigD,oBANA,CAQjBC,SAAS,CAAG,CACjBx+C,IAAI,CAAEs+C,OAAO,CAAG,cAAH,CAAoB,aADhB,CARK,CAmCvB,MAvBKA,QAuBL,CArBCE,SAAS,CAACC,YAAV,CAAyB,CACxBC,IAAI,CAAiB,CAAf,CAAApgD,MAAM,CAACqgD,KADW,CAExBC,IAAI,CAAe,CAAb,CAAAtgD,MAAM,CAACixB,GAFW,CAGxBsvB,IAAI,CAAgB,CAAd,EAAAvgD,MAAM,CAACkqB,GAAP,CAAkB,IAAlB,CAA0BlqB,MAAM,CAACkqB,GAHf,CAIxBs2B,KAAK,CAAgB,CAAd,CAAAxgD,MAAM,CAACiqB,IAAP,CAAkB,CAAlB,CAAsBjqB,MAAM,CAACiqB,IAJZ,CAqB1B,CAZCi2B,SAAS,CAACO,WAAV,CAAwB,CACvBC,WAAW,CAAE1gD,MAAM,CAACs4B,MADG,CAEvBqoB,IAAI,CAAEn/C,+CAAS,CAACo/C,QAAV,CAAoB5gD,MAAM,CAAC6gD,GAA3B,CAFiB,CAGvBN,IAAI,CAAgB,CAAd,EAAAvgD,MAAM,CAACkqB,GAAP,CAAkB,IAAlB,CAA0BlqB,MAAM,CAACkqB,GAHhB,CAIvBs2B,KAAK,CAAgB,CAAd,CAAAxgD,MAAM,CAACiqB,IAAP,CAAkB,CAAlB,CAAsBjqB,MAAM,CAACiqB,IAJb,CAYzB,CAFqB,EAAhB,GAAAjqB,MAAM,CAAC5F,IAEZ,GAF0B8lD,SAAS,CAAC9lD,IAAV,CAAiB4F,MAAM,CAAC0B,IAElD,EAAO8c,IAAI,CAACuhC,OAAL,CAAa5oD,IAAb,CAAmB+oD,SAAnB,EAAiC,CAExC,CAED;;;;;;;;;IAUAY,gBAAgB,CAAElgC,IAAF,CAAQmgC,IAAR,CAAe,IAExBviC,KAAI,CAAG,KAAKA,IAFY,CAGxBo3B,OAAO,CAAG,KAAKA,OAHS,CAKvBp3B,IAAI,CAACiC,UALkB,GAKLjC,IAAI,CAACiC,UAAL,CAAkB,EALb,EAO9BG,IAAI,CAAGgwB,YAAY,CAACoQ,KAAb,CAAmBC,sBAAnB,CAA2CrgC,IAAI,CAAC/mB,KAAL,EAA3C,CAAyDknD,IAAzD,CAPuB,CAa9B,OAJMG,OAAM,CAAGtgC,IAAI,CAACsgC,MAIpB,CAHMC,QAAQ,CAAG,EAGjB,CAFMxF,QAAQ,CAAG,EAEjB,CAAUllD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGyqD,MAAM,CAACvqD,MAA5B,CAAoC,EAAGF,CAAvC,CAA2C,IAEpC2qD,MAAK,CAAGF,MAAM,CAAEzqD,CAAF,CAFsB,CAGpC4qD,YAAY,CAAGC,qDAAe,CAACC,cAAhB,CAAgCH,KAAK,CAAChnD,IAAtC,CAHqB,CAItConD,SAAS,CAAGF,qDAAe,CAACG,QAAhB,CAA0BV,IAA1B,CAAgCM,YAAY,CAACK,QAA7C,CAJ0B,CAKpCC,aAAa,CAAGlO,eAAe,CAAE4N,YAAY,CAACO,YAAf,CALK,CAqB1C,GAdiC,OAA5B,GAAAP,YAAY,CAACQ,UAclB,GAZM,KAAAL,SAAS,CAACM,aAYhB,CAVEN,SAAS,CAAGA,SAAS,CAACO,QAAV,CAAmBC,aAAnB,CAAkCX,YAAY,CAACY,WAA/C,CAUd,CANET,SAAS,OAMX,EAAK,CAAEA,SAAF,EAAe,CAAEG,aAAtB,CAGC,MADA98C,QAAO,CAACqI,IAAR,CAAc,8DAAd,CAA4Ek0C,KAAK,CAAChnD,IAAlF,CACA,CAAO,IAAP,CAxByC,GA6BtC8nD,eAAc,CAAGd,KAAK,CAAC/e,MAAN,CAAa1rC,MAAb,CAAsByqD,KAAK,CAACe,KAAN,CAAYxrD,MA7Bb,CA+BrCgrD,aAAa,GAAKlO,eAAe,CAACr3C,qBA/BG,GAiCzC8lD,cAAc,EAAIV,SAAS,CAACplD,qBAAV,CAAgCzF,MAjCT,EAqC1C,GAAIyrD,cAAa,OAAjB,CAEA;AAEA;AACA;AACA;AACK,KAAAhB,KAAK,CAACiB,iBAAN,CAAwBC,yCA5Ca,EA8CzCF,aAAa,CAAG,aA9CyB,CAmDzCF,cAAc,EAAI,CAnDuB,EAqD9Bd,KAAK,CAACmB,gBAAN,KAA6BC,yDArDC,CAuDzCJ,aAAa,CAAG,MAvDyB,CA2DzCA,aAAa,CAAG,QA3DyB,CA+D1CzG,QAAQ,CAACxkD,IAAT,CAAe,CACdk6C,KAAK,CAAE,KAAK4I,eAAL,CAAsB,GAAI/tC,sDAAJ,CAAqBk1C,KAAK,CAACe,KAA3B,CApCR,CAoCQ,CAAtB,CADO,CAEdvN,MAAM,CAAE,KAAKqF,eAAL,CAAsB,GAAI/tC,sDAAJ,CAAqBk1C,KAAK,CAAC/e,MAA3B,CAAmC6f,cAAnC,CAAtB,CAFM,CAGdE,aAAa,CAAEA,aAHD,CAAf,CA/D0C,CAqE1CjB,QAAQ,CAAChqD,IAAT,CAAe,CACd4kD,OAAO,CAAEJ,QAAQ,CAAChlD,MAAT,CAAkB,CADb,CAEdu6B,MAAM,CAAE,CACPuxB,IAAI,CAAE7M,OAAO,CAACn0B,GAAR,CAAa+/B,SAAb,CADC,CAEP7+B,IAAI,CAAEg/B,aAFC,CAFM,CAAf,CAQA,CAQD,MANAnjC,KAAI,CAACiC,UAAL,CAAgBtpB,IAAhB,CAAsB,CACrBiD,IAAI,CAAEwmB,IAAI,CAACxmB,IAAL,EAAa,QAAUokB,IAAI,CAACiC,UAAL,CAAgB9pB,MADxB,CAErBglD,QAAQ,CAAEA,QAFW,CAGrBwF,QAAQ,CAAEA,QAHW,CAAtB,CAMA,CAAO3iC,IAAI,CAACiC,UAAL,CAAgB9pB,MAAhB,CAAyB,CAEhC,CAED;;;IAIC+rD,WAAW,CAAEr1C,MAAF,CAAW,IAEhBmR,KAAI,CAAG,KAAKA,IAFI,CAGhBo3B,OAAO,CAAG,KAAKA,OAHC,CAKhB6M,IAAI,CAAGjkC,IAAI,CAACmkC,KAAL,CAAY/M,OAAO,CAACn0B,GAAR,CAAapU,MAAb,CAAZ,CALS,CAOhB00C,QAAQ,CAAG10C,MAAM,CAAC00C,QAPF,CAStB,GAAKA,QAAQ,SAAb,CAA8B,MAAO,KAAP,CAE9B,GAAMa,UAAS,CAAGv1C,MAAM,CAAC00C,QAAP,CAAgBjiC,KAAhB,CAAuB,CAAvB,CAAlB,CAEA,GAAK8iC,SAAS,SAAd,CAA+B,MAAO,KAAP,CAM/B,OAJMC,OAAM,CAAG,EAIf,CAHMC,mBAAmB,CAAG,GAAI72C,aAAJ,CAA0C,EAAxB,CAAA81C,QAAQ,CAACjiC,KAAT,CAAenpB,MAAjC,CAG5B,CAFMosD,oBAAoB,CAAG,GAAI3hD,8CAEjC,CAAU3K,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGsrD,QAAQ,CAACjiC,KAAT,CAAenpB,MAApC,CAA4C,EAAGF,CAA/C,CAECosD,MAAM,CAAC1rD,IAAP,CAAay+C,OAAO,CAACn0B,GAAR,CAAasgC,QAAQ,CAACjiC,KAAT,CAAgBrpB,CAAhB,CAAb,CAAb,CAFD,CAGCssD,oBAAoB,CAAC/8C,IAArB,CAA2B+7C,QAAQ,CAACiB,YAAT,CAAuBvsD,CAAvB,CAA3B,CAHD,CAICssD,oBAAoB,CAACE,QAArB,CAA+B51C,MAAM,CAAC61C,UAAtC,EAAmD9J,OAAnD,CAA4D0J,mBAA5D,CAAqF,EAAJ,CAAArsD,CAAjF,CAJD,CAQK+nB,IAAI,CAACs3B,KAAL,SA3BiB,GA2BUt3B,IAAI,CAACs3B,KAAL,CAAa,EA3BvB,EA6BtBt3B,IAAI,CAACs3B,KAAL,CAAW3+C,IAAX,CAAiB,CAChB2rD,mBAAmB,CAAE,KAAK7I,eAAL,CAAsB,GAAI/tC,sDAAJ,CAAqB42C,mBAArB,CAA0C,EAA1C,CAAtB,CADL,CAEhBD,MAAM,CAAEA,MAFQ,CAGhBd,QAAQ,CAAEnM,OAAO,CAACn0B,GAAR,CAAamhC,SAAb,CAHM,CAAjB,CA7BsB,CAmCtB,GAAMhE,UAAS,CAAG6D,IAAI,CAACU,IAAL,CAAY3kC,IAAI,CAACs3B,KAAL,CAAWn/C,MAAX,CAAoB,CAAlD,CAEA,MAAOioD,UAEP,CAED;;;;IAKAwE,WAAW,CAAE/1C,MAAF,CAAW,IAEfmR,KAAI,CAAG,KAAKA,IAFG,CAGf3qB,OAAO,CAAG,KAAKA,OAHA,CAIf+hD,OAAO,CAAG,KAAKA,OAJA,CAMdp3B,IAAI,CAACmkC,KANS,GAMDnkC,IAAI,CAACmkC,KAAL,CAAa,EANZ,EAQrB,GAAMU,QAAO,CAAG,EAAhB,CAEA,GAAKxvD,OAAO,CAAC0iD,GAAb,CAAmB,IAEZlG,SAAQ,CAAGhjC,MAAM,CAACijC,UAAP,CAAkB8I,OAAlB,EAFC,CAGZt+C,QAAQ,CAAGuS,MAAM,CAACvS,QAAP,CAAgBs+C,OAAhB,EAHC,CAIZr1C,KAAK,CAAGsJ,MAAM,CAACtJ,KAAP,CAAaq1C,OAAb,EAJI,CAMXpF,UAAU,CAAE3D,QAAF,CAAY,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAW,CAAX,CAAZ,CANC,GAQjBgT,OAAO,CAAChT,QAAR,CAAmBA,QARF,EAYX2D,UAAU,CAAEl5C,QAAF,CAAY,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAZ,CAZC,GAcjBuoD,OAAO,CAACC,WAAR,CAAsBxoD,QAdL,EAkBXk5C,UAAU,CAAEjwC,KAAF,CAAS,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAT,CAlBC,GAoBjBs/C,OAAO,CAACt/C,KAAR,CAAgBA,KApBC,CAwBlB,CAxBD,IA0BMsJ,OAAM,CAAC/R,gBA1Bb,EA4BE+R,MAAM,CAAClJ,YAAP,EA5BF,CAgCM,KAAAuwC,gBAAgB,CAAErnC,MAAM,CAAC3K,MAAT,CAhCtB,GAkCE2gD,OAAO,CAAC3gD,MAAR,CAAiB2K,MAAM,CAAC3K,MAAP,CAAc2S,QAlCjC,EAwCA;AAKA,GAJqB,EAAhB,GAAAhI,MAAM,CAACjT,IAIZ,GAJ0BipD,OAAO,CAACjpD,IAAR,CAAuBiT,MAAM,CAACjT,IAA9B,GAI1B,EAFA,KAAK89C,iBAAL,CAAwB7qC,MAAxB,CAAgCg2C,OAAhC,CAEA,CAAKh2C,MAAM,CAAClF,MAAP,EAAiBkF,MAAM,CAACE,MAAxB,EAAkCF,MAAM,CAACC,QAA9C,CAAyD,CAExD,GAAMi2C,UAAS,CAAG,KAAKrF,WAAL,CAAkB7wC,MAAlB,CAAlB,CAEmB,IAAd,GAAAk2C,SAJmD,GAI9BF,OAAO,CAAC1tD,IAAR,CAAe4tD,SAJe,CAMxD,CAND,IAMYl2C,OAAM,CAACm2C,QANnB,GAQCH,OAAO,CAACrjD,MAAR,CAAiB,KAAK8/C,aAAL,CAAoBzyC,MAApB,CARlB,EAcA,GAFKA,MAAM,CAACy0C,aAEZ,EAF4B,KAAKhM,KAAL,CAAW3+C,IAAX,CAAiBkW,MAAjB,CAE5B,CAA8B,CAAzB,CAAAA,MAAM,CAACshB,QAAP,CAAgBh4B,MAArB,CAAkC,CAIjC,OAEO8sC,MAFP,CAFM9U,QAAQ,CAAG,EAEjB,CAAUl4B,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAGgE,MAAM,CAACshB,QAAP,CAAgBh4B,MAArC,CAA6CF,CAAC,CAAG4S,CAAjD,CAAoD5S,CAAC,EAArD,CAIC,GAFMgtC,KAEN,CAFcp2B,MAAM,CAACshB,QAAP,CAAiBl4B,CAAjB,CAEd,CAAKgtC,KAAK,CAAC1mC,OAAN,EAAiB,KAAAlJ,OAAO,CAAC2iD,WAA9B,CAAsD,CAErD,GAAMiN,WAAS,CAAG,KAAKL,WAAL,CAAkB3f,KAAlB,CAAlB,CAEmB,IAAd,GAAAggB,UAJgD,EAI3B90B,QAAQ,CAACx3B,IAAT,CAAessD,UAAf,CAE1B,CAIqB,CAAlB,CAAA90B,QAAQ,CAACh4B,MAlBmB,GAkBN0sD,OAAO,CAAC10B,QAAR,CAAmBA,QAlBb,CAoBjC,CAED,KAAKqtB,UAAL,CAAiB,SAAWC,GAAX,CAAiB,CAEjCA,GAAG,CAACyH,SAAJ,EAAiBzH,GAAG,CAACyH,SAAJ,CAAer2C,MAAf,CAAuBg2C,OAAvB,CAEjB,CAJD,CA3FqB,CAiGrB,GAAMI,UAAS,CAAGjlC,IAAI,CAACmkC,KAAL,CAAWxrD,IAAX,CAAiBksD,OAAjB,EAA6B,CAA/C,CAEA,MADAzN,QAAO,CAACt2C,GAAR,CAAa+N,MAAb,CAAqBo2C,SAArB,CACA,CAAOA,SAEP,CAED;;;IAIAE,YAAY,CAAEjjD,KAAF,CAAU,IAEf8d,KAAI,CAAG,KAAKA,IAFG,CAGf3qB,OAAO,CAAG,KAAKA,OAHA,CAKd2qB,IAAI,CAAColC,MALS,GAOpBplC,IAAI,CAAColC,MAAL,CAAc,EAPM,CAQpBplC,IAAI,CAAC9d,KAAL,CAAa,CARO,EAYrB,GAAMmjD,SAAQ,CAAG,EAAjB,CAEoB,EAAf,GAAAnjD,KAAK,CAACtG,IAdU,GAcIypD,QAAQ,CAACzpD,IAAT,CAAgBsG,KAAK,CAACtG,IAd1B,EAgBrBokB,IAAI,CAAColC,MAAL,CAAYzsD,IAAZ,CAAkB0sD,QAAlB,CAhBqB,CAoBrB,OAEOpgB,MAFP,CAFMkf,KAAK,CAAG,EAEd,CAAUlsD,CAAC,CAAG,CAAd,CAAiB4S,CAAC,CAAG3I,KAAK,CAACiuB,QAAN,CAAeh4B,MAApC,CAA4CF,CAAC,CAAG4S,CAAhD,CAAmD5S,CAAC,EAApD,CAIC,GAFMgtC,KAEN,CAFc/iC,KAAK,CAACiuB,QAAN,CAAgBl4B,CAAhB,CAEd,CAAKgtC,KAAK,CAAC1mC,OAAN,EAAiB,KAAAlJ,OAAO,CAAC2iD,WAA9B,CAAsD,CAErD,GAAMiN,UAAS,CAAG,KAAKL,WAAL,CAAkB3f,KAAlB,CAAlB,CAEmB,IAAd,GAAAggB,SAJgD,EAI3Bd,KAAK,CAACxrD,IAAN,CAAYssD,SAAZ,CAE1B,CAIkB,CAAf,CAAAd,KAAK,CAAChsD,MAlCU,GAkCGktD,QAAQ,CAAClB,KAAT,CAAiBA,KAlCpB,EAoCrB,KAAKzK,iBAAL,CAAwBx3C,KAAxB,CAA+BmjD,QAA/B,CAEA,CAED;;;IAIAC,cAAc,CAAEtZ,OAAF,CAAY,CAEzB,GAAM9pC,MAAK,CAAG,GAAIlO,4CAAlB,CACAkO,KAAK,CAACtG,IAAN,CAAa,UAHY,CAKzB,IAAM,GAAI3D,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG+zC,OAAO,CAAC7zC,MAA7B,CAAqCF,CAAC,EAAtC,CAEC;AACA;AACAiK,KAAK,CAACiuB,QAAN,CAAex3B,IAAf,CAAqBqzC,OAAO,CAAE/zC,CAAF,CAA5B,EAID,KAAKktD,YAAL,CAAmBjjD,KAAnB,CAEA,CAED;;IAGAm2C,YAAY,CAAExF,KAAF,CAAU,CAErB,GAAMx9C,QAAO,CAAG,KAAKA,OAArB,CAEAw9C,KAAK,CAAGA,KAAK,WAAYlrC,MAAjB,CAAyBkrC,KAAzB,CAAiC,CAAEA,KAAF,CAJpB,CAMrB,KAAK2K,UAAL,CAAiB,SAAWC,GAAX,CAAiB,CAEjCA,GAAG,CAAC8H,WAAJ,EAAmB9H,GAAG,CAAC8H,WAAJ,CAAiB1S,KAAjB,CAEnB,CAJD,CANqB,CAcrB,OAFM2S,oBAAmB,CAAG,EAE5B,CAAUvtD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG46C,KAAK,CAAC16C,MAA3B,CAAmCF,CAAC,EAApC,CAEM46C,KAAK,CAAE56C,CAAF,CAAL,UAAsBjE,4CAF5B,CAIE,KAAKmxD,YAAL,CAAmBtS,KAAK,CAAE56C,CAAF,CAAxB,CAJF,CAQEutD,mBAAmB,CAAC7sD,IAApB,CAA0Bk6C,KAAK,CAAE56C,CAAF,CAA/B,CARF,CAckC,CAA7B,CAAAutD,mBAAmB,CAACrtD,MA5BJ,EA4BiB,KAAKmtD,cAAL,CAAqBE,mBAArB,CA5BjB,CA8BrB,IAAM,GAAIvtD,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAG,KAAKq/C,KAAL,CAAWn/C,MAAhC,CAAwC,EAAGF,GAA3C,CAEC,KAAKisD,WAAL,CAAkB,KAAK5M,KAAL,CAAYr/C,GAAZ,CAAlB,EAID,IAAM,GAAIA,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAG5C,OAAO,CAAC4sB,UAAR,CAAmB9pB,MAAxC,CAAgD,EAAGF,GAAnD,CAEC,KAAKqqD,gBAAL,CAAuBjtD,OAAO,CAAC4sB,UAAR,CAAoBhqB,GAApB,EAAwBmqB,IAA/C,CAAqD/sB,OAAO,CAAC4sB,UAAR,CAAmBhqB,GAAnB,EAAsBd,IAA3E,EAID,KAAKqmD,UAAL,CAAiB,SAAWC,GAAX,CAAiB,CAEjCA,GAAG,CAACgI,UAAJ,EAAkBhI,GAAG,CAACgI,UAAJ,CAAgB5S,KAAhB,CAElB,CAJD,CAMA,CAED2K,UAAU,CAAEkI,IAAF,CAAS,CAElB,IAAM,GAAIztD,EAAC,CAAG,CAAR,CAAWsM,EAAE,CAAG,KAAKyuC,OAAL,CAAa76C,MAAnC,CAA2CF,CAAC,CAAGsM,EAA/C,CAAmDtM,CAAC,EAApD,CAECytD,IAAI,CAAE,KAAK1S,OAAL,CAAc/6C,CAAd,CAAF,CAIL,CA7sDe,CAitDjB;;;;GAKA,KAAMw6C,mBAAmB,CAExBxuC,WAAW,CAAEuuC,MAAF,CAAW,CAErB,KAAKA,MAAL,CAAcA,MAFO,CAGrB,KAAK52C,IAAL,CAAY,qBAEZ,CAEDspD,SAAS,CAAES,KAAF,CAASd,OAAT,CAAmB,CAE3B,GAAOc,KAAK,CAACC,OAAb,EAEA,GAAK,CAAED,KAAK,CAACE,kBAAR,EAA8B,CAAEF,KAAK,CAACG,YAAtC,EAAsD,CAAEH,KAAK,CAACI,WAAnE,CAGC,WADA1/C,QAAO,CAACqI,IAAR,CAAc,6EAAd,CAA6Fi3C,KAA7F,CACA,CALD,GASMnT,OAAM,CAAG,KAAKA,MATpB,CAUMxyB,IAAI,CAAGwyB,MAAM,CAACxyB,IAVpB,CAWMu3B,cAAc,CAAG/E,MAAM,CAAC+E,cAX9B,CAaMyO,QAAQ,CAAG,EAbjB,CAeKL,KAAK,CAAC/pD,IAfX,GAekBoqD,QAAQ,CAACpqD,IAAT,CAAgB+pD,KAAK,CAAC/pD,IAfxC,EAiBAoqD,QAAQ,CAAC7vD,KAAT,CAAiBwvD,KAAK,CAACxvD,KAAN,CAAYykD,OAAZ,EAjBjB,CAmBAoL,QAAQ,CAACC,SAAT,CAAqBN,KAAK,CAACM,SAnB3B,CAqBKN,KAAK,CAACE,kBArBX,CAuBCG,QAAQ,CAAC9iD,IAAT,CAAgB,aAvBjB,CAyBYyiD,KAAK,CAACG,YAzBlB,EA2BCE,QAAQ,CAAC9iD,IAAT,CAAgB,OA3BjB,CA6BuB,CAAjB,CAAAyiD,KAAK,CAAC7lD,QA7BZ,GA6B2BkmD,QAAQ,CAACjuD,KAAT,CAAiB4tD,KAAK,CAAC7lD,QA7BlD,GA+BY6lD,KAAK,CAACI,WA/BlB,GAiCCC,QAAQ,CAAC9iD,IAAT,CAAgB,MAjCjB,CAmCuB,CAAjB,CAAAyiD,KAAK,CAAC7lD,QAnCZ,GAmC2BkmD,QAAQ,CAACjuD,KAAT,CAAiB4tD,KAAK,CAAC7lD,QAnClD,EAqCCkmD,QAAQ,CAACE,IAAT,CAAgB,EArCjB,CAsCCF,QAAQ,CAACE,IAAT,CAAcC,cAAd,CAAwE,CAAE,CAA3C,GAAER,KAAK,CAACS,QAAN,CAAiB,CAAnB,EAA2BT,KAAK,CAAC5gD,KAAjC,CAtChC,CAuCCihD,QAAQ,CAACE,IAAT,CAAcG,cAAd,CAA+BV,KAAK,CAAC5gD,KAvCtC,EA2CK,SAAA4gD,KAAK,CAACW,KAAN,EAA6C,CAAhB,GAAAX,KAAK,CAACW,KA3CxC,EA6CCjgD,OAAO,CAACqI,IAAR,CAAc,0EACX,4BADH,CA7CD,CAkDKi3C,KAAK,CAACjzB,MAAN,GACEizB,KAAK,CAACjzB,MAAN,CAAale,MAAb,GAAwBmxC,KAAxB,EAC0B,CAA5B,GAAAA,KAAK,CAACjzB,MAAN,CAAap2B,QAAb,CAAsBzE,CADpB,EAE0B,CAA5B,GAAA8tD,KAAK,CAACjzB,MAAN,CAAap2B,QAAb,CAAsBxE,CAFpB,EAG0B,CAAE,CAA9B,GAAA6tD,KAAK,CAACjzB,MAAN,CAAap2B,QAAb,CAAsBiF,CAJtB,CAlDL,EAwDC8E,OAAO,CAACqI,IAAR,CAAc,sEACX,8DADH,CAxDD,CA6DO6oC,cAAc,CAAE,KAAK37C,IAAP,CA7DrB,GA+DCokB,IAAI,CAAC85B,UAAL,CAAkB95B,IAAI,CAAC85B,UAAL,EAAmB,EA/DtC,CAgEC95B,IAAI,CAAC85B,UAAL,CAAiB,KAAKl+C,IAAtB,EAA+B,CAAE2qD,MAAM,CAAE,EAAV,CAhEhC,CAiEChP,cAAc,CAAE,KAAK37C,IAAP,CAAd,GAjED,EAqEA,GAAM2qD,OAAM,CAAGvmC,IAAI,CAAC85B,UAAL,CAAiB,KAAKl+C,IAAtB,EAA6B2qD,MAA5C,CACAA,MAAM,CAAC5tD,IAAP,CAAaqtD,QAAb,CAtEA,CAwEAnB,OAAO,CAAC/K,UAAR,CAAqB+K,OAAO,CAAC/K,UAAR,EAAsB,EAxE3C,CAyEA+K,OAAO,CAAC/K,UAAR,CAAoB,KAAKl+C,IAAzB,EAAkC,CAAE+pD,KAAK,CAAEY,MAAM,CAACpuD,MAAP,CAAgB,CAAzB,CAzElC,CA2EA,CAtFuB,CA0FzB;;;;GAKA,KAAMu6C,4BAA4B,CAEjCzuC,WAAW,CAAEuuC,MAAF,CAAW,CAErB,KAAKA,MAAL,CAAcA,MAFO,CAGrB,KAAK52C,IAAL,CAAY,qBAEZ,CAED6jD,aAAa,CAAE9pD,QAAF,CAAYkoD,WAAZ,CAA0B,CAEtC,GAAOloD,QAAQ,CAACqoD,mBAAhB,KAEMxL,OAAM,CAAG,KAAKA,MAFpB,CAGM+E,cAAc,CAAG/E,MAAM,CAAC+E,cAH9B,CAKAsG,WAAW,CAAC/D,UAAZ,CAAyB+D,WAAW,CAAC/D,UAAZ,EAA0B,EALnD,CAMA+D,WAAW,CAAC/D,UAAZ,CAAwB,KAAKl+C,IAA7B,EAAsC,EANtC,CAQA27C,cAAc,CAAE,KAAK37C,IAAP,CAAd,GARA,CAUAiiD,WAAW,CAACC,oBAAZ,CAAiCI,cAAjC,CAAkD,CAVlD,CAWAL,WAAW,CAACC,oBAAZ,CAAiCM,eAAjC,CAAmD,EAXnD,CAaA,CAxBgC,CA4BlC;;;;GAKA,KAAMzL,mCAAmC,CAExC1uC,WAAW,CAAEuuC,MAAF,CAAW,CAErB,KAAKA,MAAL,CAAcA,MAFO,CAGrB,KAAK52C,IAAL,CAAY,qCAEZ,CAED6jD,aAAa,CAAE9pD,QAAF,CAAYkoD,WAAZ,CAA0B,CAEtC,GAAOloD,QAAQ,CAAC6wD,gCAAhB,KAEMhU,OAAM,CAAG,KAAKA,MAFpB,CAGM+E,cAAc,CAAG/E,MAAM,CAAC+E,cAH9B,CAKMkP,YAAY,CAAG,EALrB,CAOK5I,WAAW,CAACC,oBAAZ,CAAiCG,eAPtC,GASCwI,YAAY,CAACC,aAAb,CAA6B7I,WAAW,CAACC,oBAAZ,CAAiCG,eAT/D,EAaA,GAAM0I,eAAc,CAAG,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAvB,CAWA,GAVAhxD,QAAQ,CAACmvB,QAAT,CAAkB81B,OAAlB,CAA2B+L,cAA3B,CAA2C,CAA3C,CAUA,CATAF,YAAY,CAACE,cAAb,CAA8BA,cAS9B,CARAF,YAAY,CAACG,gBAAb,CAAgCjxD,QAAQ,CAACkxD,UAQzC,CANKhJ,WAAW,CAACC,oBAAZ,CAAiCW,gBAMtC,GAJCgI,YAAY,CAACK,cAAb,CAA8BjJ,WAAW,CAACC,oBAAZ,CAAiCW,gBAIhE,EAAK9oD,QAAQ,CAACoxB,WAAd,CAA4B,CAE3B,GAAMggC,eAAc,CAAG,CAAE3gD,KAAK,CAAEosC,MAAM,CAAC6K,cAAP,CAAuB1nD,QAAQ,CAACoxB,WAAhC,CAAT,CAAvB,CACAyrB,MAAM,CAACgI,qBAAP,CAA8BuM,cAA9B,CAA8CpxD,QAAQ,CAACoxB,WAAvD,CAH2B,CAI3B0/B,YAAY,CAACO,yBAAb,CAAyCD,cAEzC,CAEDlJ,WAAW,CAAC/D,UAAZ,CAAyB+D,WAAW,CAAC/D,UAAZ,EAA0B,EAhCnD,CAiCA+D,WAAW,CAAC/D,UAAZ,CAAwB,KAAKl+C,IAA7B,EAAsC6qD,YAjCtC,CAkCAlP,cAAc,CAAE,KAAK37C,IAAP,CAAd,GAlCA,CAoCA,CA/CuC,CAmDzC;;GAGAw2C,YAAY,CAACoQ,KAAb,CAAqB,CAEpByE,cAAc,CAAE,wBAAWrE,KAAX,CAAkBtlD,IAAlB,CAAyB,IASpC8I,MAToC,CAElCsL,SAAS,CAAG,IAFsB,CAGlCw1C,SAAS,CAAGtE,KAAK,CAACuE,YAAN,EAHsB,CAKlCxD,KAAK,CAAG,GAAIf,MAAK,CAACwE,cAAV,CAA0BxE,KAAK,CAACe,KAAN,CAAYxrD,MAAZ,CAAqB,CAA/C,CAL0B,CAMlC0rC,MAAM,CAAG,GAAI+e,MAAK,CAACyE,eAAV,CAA2BzE,KAAK,CAAC/e,MAAN,CAAa1rC,MAAb,CAAsB+uD,SAAjD,CANyB,CAOlCI,WAAW,CAAG1E,KAAK,CAACiB,iBAAN,CAAyB,GAAIjB,MAAK,CAACyE,eAAV,CAA2BH,SAA3B,CAAzB,CAPoB,CAEf;AASzB,GAA4B,CAAvB,GAAAtE,KAAK,CAACe,KAAN,CAAYxrD,MAAjB,CAAgC,CAE/BwrD,KAAK,CAAE,CAAF,CAAL,CAAarmD,IAFkB,CAI/B,IAAM,GAAIrF,EAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGivD,SAArB,CAAgCjvD,CAAC,EAAjC,CAEC4rC,MAAM,CAAE5rC,CAAF,CAAN,CAAc,CAAd,CAIDmO,KAAK,CAAG,CAER,CAZD,IAYO,IAAK9I,IAAI,CAAGslD,KAAK,CAACe,KAAN,CAAa,CAAb,CAAZ,CAA+B,CAErC,GAAKthD,IAAI,CAAC+3C,GAAL,CAAUwI,KAAK,CAACe,KAAN,CAAa,CAAb,EAAmBrmD,IAA7B,EAAsCoU,SAA3C,CAAuD,MAAO,EAAP,CAEvDiyC,KAAK,CAAE,CAAF,CAAL,CAAarmD,IAJwB,CAKrCqmD,KAAK,CAAC7iD,GAAN,CAAW8hD,KAAK,CAACe,KAAjB,CAAwB,CAAxB,CALqC,CAOrC9f,MAAM,CAAC/iC,GAAP,CAAYwmD,WAAW,CAACC,QAAZ,CAAsBjqD,IAAtB,CAAZ,CAA0C,CAA1C,CAPqC,CAQrCumC,MAAM,CAAC/iC,GAAP,CAAY8hD,KAAK,CAAC/e,MAAlB,CAA0BqjB,SAA1B,CARqC,CAUrC9gD,KAAK,CAAG,CAER,CAZM,IAYA,IAAK9I,IAAI,CAAGslD,KAAK,CAACe,KAAN,CAAaf,KAAK,CAACe,KAAN,CAAYxrD,MAAZ,CAAqB,CAAlC,CAAZ,CAAoD,CAE1D,GAAKkK,IAAI,CAAC+3C,GAAL,CAAUwI,KAAK,CAACe,KAAN,CAAaf,KAAK,CAACe,KAAN,CAAYxrD,MAAZ,CAAqB,CAAlC,EAAwCmF,IAAlD,EAA2DoU,SAAhE,CAEC,MAAOkxC,MAAK,CAACe,KAAN,CAAYxrD,MAAZ,CAAqB,CAA5B,CAIDwrD,KAAK,CAAEA,KAAK,CAACxrD,MAAN,CAAe,CAAjB,CAAL,CAA4BmF,IAR8B,CAS1DqmD,KAAK,CAAC7iD,GAAN,CAAW8hD,KAAK,CAACe,KAAjB,CAAwB,CAAxB,CAT0D,CAW1D9f,MAAM,CAAC/iC,GAAP,CAAY8hD,KAAK,CAAC/e,MAAlB,CAA0B,CAA1B,CAX0D,CAY1DA,MAAM,CAAC/iC,GAAP,CAAYwmD,WAAW,CAACC,QAAZ,CAAsBjqD,IAAtB,CAAZ,CAA0CslD,KAAK,CAAC/e,MAAN,CAAa1rC,MAAvD,CAZ0D,CAc1DiO,KAAK,CAAGu9C,KAAK,CAACxrD,MAAN,CAAe,CAEvB,CAhBM,IAkBN,KAAM,GAAIF,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAG2qD,KAAK,CAACe,KAAN,CAAYxrD,MAAjC,CAAyCF,GAAC,EAA1C,CAAgD,CAE/C,GAAKoK,IAAI,CAAC+3C,GAAL,CAAUwI,KAAK,CAACe,KAAN,CAAa1rD,GAAb,EAAmBqF,IAA7B,EAAsCoU,SAA3C,CAAuD,MAAOzZ,IAAP,CAEvD,GAAK2qD,KAAK,CAACe,KAAN,CAAa1rD,GAAb,EAAmBqF,IAAnB,EAA2BslD,KAAK,CAACe,KAAN,CAAa1rD,GAAC,CAAG,CAAjB,EAAuBqF,IAAvD,CAA8D,CAE7DqmD,KAAK,CAAC7iD,GAAN,CAAW8hD,KAAK,CAACe,KAAN,CAAY6D,KAAZ,CAAmB,CAAnB,CAAsBvvD,GAAC,CAAG,CAA1B,CAAX,CAA0C,CAA1C,CAF6D,CAG7D0rD,KAAK,CAAE1rD,GAAC,CAAG,CAAN,CAAL,CAAiBqF,IAH4C,CAI7DqmD,KAAK,CAAC7iD,GAAN,CAAW8hD,KAAK,CAACe,KAAN,CAAY6D,KAAZ,CAAmBvvD,GAAC,CAAG,CAAvB,CAAX,CAAuCA,GAAC,CAAG,CAA3C,CAJ6D,CAM7D4rC,MAAM,CAAC/iC,GAAP,CAAY8hD,KAAK,CAAC/e,MAAN,CAAa2jB,KAAb,CAAoB,CAApB,CAAuB,CAAEvvD,GAAC,CAAG,CAAN,EAAYivD,SAAnC,CAAZ,CAA4D,CAA5D,CAN6D,CAO7DrjB,MAAM,CAAC/iC,GAAP,CAAYwmD,WAAW,CAACC,QAAZ,CAAsBjqD,IAAtB,CAAZ,CAA0C,CAAErF,GAAC,CAAG,CAAN,EAAYivD,SAAtD,CAP6D,CAQ7DrjB,MAAM,CAAC/iC,GAAP,CAAY8hD,KAAK,CAAC/e,MAAN,CAAa2jB,KAAb,CAAoB,CAAEvvD,GAAC,CAAG,CAAN,EAAYivD,SAAhC,CAAZ,CAAyD,CAAEjvD,GAAC,CAAG,CAAN,EAAYivD,SAArE,CAR6D,CAU7D9gD,KAAK,CAAGnO,GAAC,CAAG,CAViD,CAY7D,KAEA,CAED,CAOF,MAHA2qD,MAAK,CAACe,KAAN,CAAcA,KAGd,CAFAf,KAAK,CAAC/e,MAAN,CAAeA,MAEf,CAAOz9B,KAEP,CApFmB,CAsFpBq8C,sBAAsB,CAAE,gCAAWrgC,IAAX,CAAiBmgC,IAAjB,CAAwB,CAM/C,OAJMG,OAAM,CAAG,EAIf,CAHM+E,YAAY,CAAG,EAGrB,CAFMC,YAAY,CAAGtlC,IAAI,CAACsgC,MAE1B,CAAUzqD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGyvD,YAAY,CAACvvD,MAAlC,CAA0C,EAAGF,CAA7C,CAAiD,IAE5C0vD,YAAW,CAAGD,YAAY,CAAEzvD,CAAF,CAFkB,CAG1C2vD,kBAAkB,CAAG9E,qDAAe,CAACC,cAAhB,CAAgC4E,WAAW,CAAC/rD,IAA5C,CAHqB,CAI1CisD,eAAe,CAAG/E,qDAAe,CAACG,QAAhB,CAA0BV,IAA1B,CAAgCqF,kBAAkB,CAAC1E,QAAnD,CAJwB,CAMhD,GAAyC,uBAApC,GAAA0E,kBAAkB,CAACxE,YAAnB,EAA+D,SAAAwE,kBAAkB,CAACE,aAAvF,CAAqH,CAGpHpF,MAAM,CAAC/pD,IAAP,CAAagvD,WAAb,CAHoH,CAIpH,QAEA,CAED,GAAKA,WAAW,CAAC9D,iBAAZ,GAAkC8D,WAAW,CAACI,gCAA9C,EACDJ,WAAW,CAAC9D,iBAAZ,GAAkC8D,WAAW,CAACK,8BADlD,CACmF,CAElF,GAAKL,WAAW,CAAC9D,iBAAZ,CAA8BC,yCAAnC,CAEC;AACA;AACA,KAAM,IAAIpI,MAAJ,CAAW,8EAAX,CAAN,CAIDr1C,OAAO,CAACqI,IAAR,CAAc,8FAAd,CAVkF,CAYlFi5C,WAAW,CAAGA,WAAW,CAACtsD,KAAZ,EAZoE,CAalFssD,WAAW,CAACM,gBAAZ,CAA8BC,uDAA9B,CAEA,CA9B+C,GAgC1CC,YAAW,CAAGN,eAAe,CAACjqD,qBAAhB,CAAsCzF,MAhCV,CAiC1CiwD,WAAW,CAAGP,eAAe,CAAC18B,qBAAhB,CAAuCy8B,kBAAkB,CAACE,aAA1D,CAjC4B,CAmChD,GAAK,SAAAM,WAAL,CAEC,KAAM,IAAI1M,MAAJ,CAAW,oDAAsDkM,kBAAkB,CAACE,aAApF,CAAN,CAID,GAAIO,YAAW,OAAf,CAEA;AACA;AACA,GAAK,SAAAZ,YAAY,CAAEI,eAAe,CAACltD,IAAlB,CAAjB,CAA0D,CAEzD0tD,WAAW,CAAGV,WAAW,CAACtsD,KAAZ,EAF2C,CAMzD,OAFMwoC,OAAM,CAAG,GAAIwkB,YAAW,CAAChB,eAAhB,CAAiCc,WAAW,CAAGE,WAAW,CAAC1E,KAAZ,CAAkBxrD,MAAjE,CAEf,CAAUwM,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG0jD,WAAW,CAAC1E,KAAZ,CAAkBxrD,MAAvC,CAA+CwM,CAAC,EAAhD,CAECk/B,MAAM,CAAEl/B,CAAC,CAAGwjD,WAAJ,CAAkBC,WAApB,CAAN,CAA0CC,WAAW,CAACxkB,MAAZ,CAAoBl/B,CAApB,CAA1C,CAID;AACA;AACA0jD,WAAW,CAACzsD,IAAZ,CAAmB,CAAEgsD,kBAAkB,CAAC1E,QAAnB,EAA+B,EAAjC,EAAwC,wBAdF,CAezDmF,WAAW,CAACxkB,MAAZ,CAAqBA,MAfoC,CAiBzD4jB,YAAY,CAAEI,eAAe,CAACltD,IAAlB,CAAZ,CAAuC0tD,WAjBkB,CAkBzD3F,MAAM,CAAC/pD,IAAP,CAAa0vD,WAAb,CAlByD,CAoBzD,QAEA,CAED,GAAMC,kBAAiB,CAAGX,WAAW,CAAC9D,iBAAZ,CAA+B,GAAI8D,YAAW,CAACN,eAAhB,CAAiC,CAAjC,CAA/B,CAA1B,CAEAgB,WAAW,CAAGZ,YAAY,CAAEI,eAAe,CAACltD,IAAlB,CAvEsB,CAyEhD;AACA;AACA,IAAM,GAAIgK,IAAC,CAAG,CAAd,CAAiBA,GAAC,CAAG0jD,WAAW,CAAC1E,KAAZ,CAAkBxrD,MAAvC,CAA+CwM,GAAC,EAAhD,CAEC0jD,WAAW,CAACxkB,MAAZ,CAAoBl/B,GAAC,CAAGwjD,WAAJ,CAAkBC,WAAtC,EAAsDE,iBAAiB,CAACf,QAAlB,CAA4Bc,WAAW,CAAC1E,KAAZ,CAAmBh/C,GAAnB,CAA5B,CAAtD,CAID;AACA;AACA;AACA,IAAM,GAEC4jD,cAFD,CAAI5jD,GAAC,CAAG,CAAd,CAAiBA,GAAC,CAAGgjD,WAAW,CAAChE,KAAZ,CAAkBxrD,MAAvC,CAA+CwM,GAAC,EAAhD,CAEO4jD,aAFP,CAEuB,KAAKtB,cAAL,CAAqBoB,WAArB,CAAkCV,WAAW,CAAChE,KAAZ,CAAmBh/C,GAAnB,CAAlC,CAFvB,CAGC0jD,WAAW,CAACxkB,MAAZ,CAAoB0kB,aAAa,CAAGJ,WAAhB,CAA8BC,WAAlD,EAAkET,WAAW,CAAC9jB,MAAZ,CAAoBl/B,GAApB,CAInE,CAID,MAFAyd,KAAI,CAACsgC,MAAL,CAAcA,MAEd,CAAOtgC,IAEP,CA7LmB,C;;;;;;GC9sEfztB,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfyc,UAAU,CAAGzc,mBAAO,CAAC,CAAD,CAAP,CAAuByc,U,CASpCxb,QAAQ,CAAG,UAAY,CAE5B,KAAKq0D,SAAL,CAAiB,OAFW,CAI5B,KAAKC,QAAL,CAAgB,OAJY,CAM5B,KAAK5pB,WAAL,CAAmB,CAAC,EAAD,CAAM,CAAC,OAAP,CAAgB,EAAhB,CANS,CAQ5B,KAAKD,cAAL,CAAsB,CAAC,EAAD,CAAM,EAAN,CAAW,EAAX,CARM,CAU5B,KAAKE,QAAL,CAAgB,CAAE,CAAF,CAAO,CAAP,CAAY,CAAZ,CAVY,CAW5B,GAAMzW,MAAK,CAAG,IAAd,CAEC,KAAKuS,aAAL,CAAqB,QAAoE,IAAnE,CAAE4tB,SAAF,CAAaC,QAAb,CAAuB5pB,WAAvB,CAAoCD,cAApC,CAAoDE,QAApD,CAAmE,MACvFzW,KAAK,CAACmgC,SAAN,CAAkBA,SADqE,CAEvFngC,KAAK,CAACogC,QAAN,CAAiBA,QAFsE,CAGvFpgC,KAAK,CAACwW,WAAN,CAAoBA,WAHmE,CAIvFxW,KAAK,CAACuW,cAAN,CAAuBA,cAJgE,CAKvFvW,KAAK,CAACyW,QAAN,CAAiBA,QAClB,CACF,C,CASK1qC,cAAc,CAAG,SAAWya,MAAX,CAAmBskB,UAAnB,CAA+BtC,QAA/B,CAAyC3uB,KAAzC,CAAiD,IACjEwmD,KAAI,CAAG,CAAEC,IAAI,CAAE,CAAC,CAAT,CAAYC,OAAO,CAAE,CAArB,CAAwBC,IAAI,CAAE,CAA9B,CAAiCC,wBAAwB,CAAE,CAA3D,CAA8DC,WAAW,CAAE,CAA3E,CAA8EC,iBAAiB,CAAE,CAAjG,CAAoGC,OAAO,CAAE,CAA7G,CAAgHC,YAAY,CAAE,CAA9H,CAD0D,CAOjEC,KAAK,CAAG,CAAER,IAAI,CAAE,CAAC,CAAT,CAAYS,MAAM,CAAE,CAApB,CAAuBC,IAAI,CAAE,CAA7B,CAAgCC,GAAG,CAAE,CAArC,CAAwCC,YAAY,CAAE,CAAtD,CAAyDC,UAAU,CAAE,CAArE,CAAwEC,SAAS,CAAE,CAAnF,CAAsFC,MAAM,CAAE,CAA9F,CAPyD,CAQhEC,gBAAgB,CAAG,CAAEhB,IAAI,CAAE,CAAC,CAAT,CAAYiB,IAAI,CAAE,CAAlB,CAAqBC,UAAU,CAAE,CAAjC,CAAoCC,QAAQ,CAAE,CAA9C,CAR6C,CAajEC,YAAY,CAAG,EAbkD,CAEtE;;;;KAYDA,YAAY,CAACC,IAAb,CAAoBb,KAAK,CAACC,MAd6C,CAevEW,YAAY,CAACE,SAAb,CAAyBd,KAAK,CAACE,IAfwC,CAgBvEU,YAAY,CAACG,SAAb,CAAyBf,KAAK,CAACG,GAhBwC,CAiBvE,KAAK3nD,YAAL,CAAoBkN,MAjBmD,CAkBvE,KAAKskB,UAAL,CAAoBA,UAAU,SAAZ,CAA4ChK,QAA5C,CAA+BgK,UAlBsB,CAmBvE,KAAKtC,QAAL,CAAgBA,QAnBuD,CAoBvE,KAAK3uB,KAAL,CAAaA,KApB0D,CAqBvE,KAAKioD,WAAL,CAAmB,GArBoD,CAsBvE,KAAKC,SAAL,CAAiB,CAtBsD,CAuBvE,KAAKC,SAAL,CAAiB,CAvBsD,CAwBvE,KAAKC,eAAL,CAAuB,CAxBgD,CAyBvE,KAAKC,eAAL,CAAuB,CAzBgD,CA0BvE,KAAKC,kBAAL,CAA0B,CA1B6C,CA2BvE,KAAKC,kBAAL,CAA0B,CA3B6C,CA4BvE,KAAKC,mBAAL,CAA2B,CA5B4C,CA6BvE,KAAKC,sBAAL,CAA8B,CA7ByC,CA8BvE,KAAKC,oBAAL,CAA4B,CA9B2C,CA+BvE,KAAK/xB,gBAAL,CAAwB,CA/B+C,CAgCvE,KAAKgyB,UAAL,CAAkB,EAhCqD,IAiCnEhxD,SAAQ,CAAG,GAjCwD,CAkCnEH,WAAW,CAAG,CAlCqD,CAmCnEoxD,UAAU,OAnCyD,CAoCnEC,mBAAmB,OApCgD,CAqCnEC,uBAAuB,GArC4C,CAsCnE/5B,QAAQ,CAAG,GAtCwD,CAuCnEg6B,wBAAwB,OAvC2C,CAwCnEC,eAAe,CAAG,SAxCiD,CAyCnEC,WAAW,CAAGzC,IAAI,CAACE,OAzCgD,CA0CnEwC,4BAA4B,OA1CuC,CA2CnEC,4BAA4B,OA3CuC,CA4CnEC,sBAAsB,OA5C6C,CA6CnEC,WAAW,CAAG,CA7CqD,CA8ClEC,UAAU,CAAG7B,gBAAgB,CAACC,IA9CoC,CA+CvE,KAAK6B,MAAL,CAActC,KAAK,CAACR,IA/CmD,CAgDvE,GAAI+C,cAAJ,CACA,KAAKC,aAAL,CAAqB,CAAC,CAjDiD,IAkDlEC,KAAI,OAlD8D,CAmDhEC,EAAE,CAAG,GAAIl3D,MAAK,CAAC4F,OAnDiD,CAoDhEuxD,EAAE,CAAG,GAAIn3D,MAAK,CAAC4F,OApDiD,CAqDhEwxD,EAAE,CAAG,GAAIp3D,MAAK,CAAC4F,OArDiD,CAsDhEyxD,MAAM,CAAG,GAAIr3D,MAAK,CAAC4F,OAtD6C,CAuDhE0xD,MAAM,CAAG,GAAIt3D,MAAK,CAAC4F,OAvD6C,CAwDhE2xD,KAAK,CAAG,GAAIv3D,MAAK,CAAC4F,OAxD8C,CAyDhE4xD,EAAE,CAAG,GAAIx3D,MAAK,CAAC4F,OAzDiD,CA0DhE6xD,QAAQ,CAAG,GAAIz3D,MAAK,CAAC4F,OA1D2C,CA2DhE8xD,WAAW,CAAG,GAAI13D,MAAK,CAAC4T,MA3DwC,CA4DhE+jD,QAAQ,CAAG,GAAI33D,MAAK,CAAC4F,OA5D2C,CA6DlEgyD,UAAU,OA7DwD,CA8DlEC,OAAO,CAAG,CA9DwD,CA+DhEC,SAAS,CAAG,CAChB,QAAY,GAAIt4D,SADA,CA/DoD,CAkEtEs4D,SAAS,CAAC11C,OAAV,CAAkByxC,SAAlB,CAA8B,EAlEwC,CAmEvEiE,SAAS,CAAC11C,OAAV,CAAkB0xC,QAAlB,CAA6B,GAnE0C,CAoEvEgE,SAAS,CAAC11C,OAAV,CAAkB8nB,WAAlB,CAAgC,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CApEuC,CAqEvE4tB,SAAS,CAAC11C,OAAV,CAAkB6nB,cAAlB,CAAmC,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAC,CAAR,CArEoC,CAsEvE6tB,SAAS,CAAC11C,OAAV,CAAkB+nB,QAAlB,CAA6B,CAAE,CAAF,CAAO,CAAP,CAAY,CAAZ,CAtE0C,CAyEnE,KAAKn9B,YAAL,CAAkB+wB,MAAlB,SAzEmE,GA0EtE,KAAK/wB,YAAL,CAAkB+wB,MAAlB,CAA2B,GAAI/9B,MAAK,CAAC4F,OAAV,CAAmB,GAAGkyD,SAAS,CAAC11C,OAAV,CAAkB6nB,cAAxC,CA1E2C,EAgFtE,KAAKpC,2BAAL,CAAoCt6B,KAAD,EAAW,CAC5C,GAAMtB,IAAG,CAAGsB,KAAK,CAACvB,cAAN,EAAZ,CACA,GAAIC,GAAJ,CAAS,CACPA,GAAG,CAAC8rD,iBAAJ,CAAsBL,WAAtB,CADO,CAEPG,OAAO,CAAwB,CAArB,CAAAH,WAAW,CAACxlD,MAFf,CAGP,GAAI8lD,YAAW,CAAG,CAAlB,CACI,KAAKhrD,YAJF,GAKLgrD,WAAW,CAAG,KAAKhrD,YAAL,CAAkBrF,QAAlB,CAA2B8D,UAA3B,CAAsCisD,WAAW,CAACzsD,MAAlD,CALT,EAOP4sD,OAAO,CAAGG,WAAW,CAAGH,OAAd,CAAwBG,WAAxB,CAAsCH,OACjD,CARD,IASEA,QAAO,CAAG,CAEb,CA7FqE,CAqGtE,KAAKtxB,WAAL,CAAmB,CAAC0xB,YAAD,CAAe3xB,QAAf,GAA4B,CACzC2xB,YAAY,EAAI3xB,QADyB,GAE3CwxB,SAAS,CAACG,YAAD,CAAT,CAA0B3xB,QAFiB,CAG9C,CAxGqE,CAiHtE,KAAKE,kBAAL,CAA0B0xB,WAAW,KACjCA,WAAW,EAAKA,WAAW,GAAIJ,UADE,IAEjCvB,eAAe,CAAG2B,WAFe,IAjHiC,CA+HtE,KAAKC,kBAAL,CAA0B,IACnB5B,eAhI+D,CAyIvE,KAAK6B,iBAAL,CAAyBnxD,IAAI,EACrB6wD,SAAS,CAAC7wD,IAAD,CA1IsD,CAmJtE,KAAKmoC,kBAAL,CAA0BnoC,IAAI,KACxBA,IAAI,GAAI6wD,UADgB,IAE1B,KAAK5xB,wBAAL,CAA8B4xB,SAAS,CAAC7wD,IAAD,CAAvC,CAF0B,IAnJwC,CAiKtE,KAAKoxD,eAAL,CAAuBnN,IAAI,EAAI,CAC7B,OAAQA,IAAR,EACE,IAAK,MAAL,CACE2L,UAAU,CAAG7B,gBAAgB,CAAChB,IADhC,CAEE,MACF,IAAK,YAAL,CACE6C,UAAU,CAAG7B,gBAAgB,CAACE,UADhC,CAEE,MACF,IAAK,UAAL,CACE2B,UAAU,CAAG7B,gBAAgB,CAACG,QADhC,CAEE,MACF,IAAK,MAAL,CACA,QACE0B,UAAU,CAAG7B,gBAAgB,CAACC,IADhC,CAXF,CAcD,CAhLqE,CAkLvE,KAAK5vB,QAAL,CAAgB,IAAM,CACjB4xB,IADiB,GAEpBA,IAAI,OAFgB,EAGfW,UAHe,EAIjBA,UAAU,CAAC1xB,wBAAX,CAAoC,KAAKl5B,YAAzC,CACE8qD,SAAS,CAACvB,eAAD,CADX,CAEJ,CAxLsE,CAqMtE,KAAK+B,wBAAL,CAAgC,CAACp1D,CAAD,CAAIC,CAAJ,CAAOo1D,UAAP,GAAsB,CACpDC,UAAU,IAD0C,IAE9C7wD,SAAQ,CAAG4wD,UAAU,CAAGA,UAAH,CAAgB,GAAIv4D,MAAK,CAACiD,OAFD,CAG9Cw1D,KAAK,CAAoC,CAAjC,EAAC,CAACv1D,CAAC,CAAG+zD,IAAI,CAACp5B,IAAV,EAAkBo5B,IAAI,CAACv/B,KAAxB,EAAqC,CAHC,CAI9CghC,KAAK,CAAqC,CAAlC,GAAE,CAACv1D,CAAC,CAAG8zD,IAAI,CAACn5B,GAAV,EAAiBm5B,IAAI,CAAC99B,MAAxB,EAAsC,CAJA,CAKpD,MAAOxxB,SAAQ,CAACwE,GAAT,CAAassD,KAAb,CAAoBC,KAApB,CACR,CA3MqE,CAwNtE,KAAK9qD,wBAAL,CAAgC,CAAC1K,CAAD,CAAIC,CAAJ,CAAOo1D,UAAP,GAAsB,CACpDC,UAAU,IAD0C,CAEpD,GAAM7wD,SAAQ,CAAG4wD,UAAU,CAAGA,UAAH,CAAgB,GAAIv4D,MAAK,CAACiD,OAArD,CAGA,MAFA0E,SAAQ,CAACzE,CAAT,CAAa,CAACA,CAAC,CAAG,CAAL,EAAU+zD,IAAI,CAACv/B,KAAf,CAAuB,CAEpC,CADA/vB,QAAQ,CAACxE,CAAT,CAAa,CAAC,EAAIA,CAAL,EAAU8zD,IAAI,CAAC99B,MAAf,CAAwB,CACrC,CAAOxxB,QACR,CA9NqE,CAsOvE,KAAKgxD,oBAAL,CAA4B,CAACC,UAAD,CAAaC,UAAb,GAA4B,CACvDzD,YAAY,CAACwD,UAAD,CAAZ,CAA2BpE,KAAK,CAACqE,UAAD,CAC/B,CAxOqE,CA0OtE;AA1OsE,GA2OhEC,oBAAmB,CAAG,IAAM,CAChC,GAAc,CAAV,CAAAjB,OAAJ,CAAiB,CACf,GAAMkB,QAAO,CAAGpB,QAAQ,CAAClsD,UAAT,CAAoBisD,WAAW,CAACzsD,MAAhC,CAAhB,CACA,MAAQ4sD,QAAO,CAAGkB,OAAV,EACN,KAAK/rD,YAAL,CAAkBrF,QAAlB,CAA2B8D,UAA3B,CAAsCisD,WAAW,CAACzsD,MAAlD,EAA4D8tD,OAC/D,CACD,QACD,CAlPqE,CAoPhEC,iBAAiB,CAAG7I,WAAW,EAAI,CACvCwH,QAAQ,CAAC9kD,IAAT,CAAc,KAAK7F,YAAL,CAAkBrF,QAAhC,EAA0CP,GAA1C,CAA8C+oD,WAA9C,CADuC,CAEnC2I,mBAAmB,EAFgB,GAGrC,KAAK9rD,YAAL,CAAkB+wB,MAAlB,CAAyB32B,GAAzB,CAA6B+oD,WAA7B,CAHqC,CAIrC,KAAKnjD,YAAL,CAAkBrF,QAAlB,CAA2BP,GAA3B,CAA+B+oD,WAA/B,CAJqC,CAKrC,KAAKlwB,sBAAL,EALqC,CAOxC,CA3PqE,CA6PjEg5B,mBAAmB,CAAG7tB,KAAK,EAAI,CAClCotB,UAAU,IADwB,CAElC;AACA,GAAIU,mBAAJ,CAIA,GAHI1C,WAAW,GAAKzC,IAAI,CAACE,OAGzB,GAFEiF,kBAAkB,CAAG,KAAK3rD,KAAL,CAAW49B,+BAAX,CACnB,KAAKjP,QADc,CACJkP,KADI,CAEvB,EAAI,CAAC8tB,kBAAL,CACsB,CAAhB,EAAA9tB,KAAK,CAAC+tB,MADZ,CAEQ/tB,KAAK,CAACguB,OAFd,CAGM,KAAKtC,MAAL,CAAc1B,YAAY,CAACE,SAHjC,CAIalqB,KAAK,CAACiuB,QAJnB,CAKM,KAAKvC,MAAL,CAAc1B,YAAY,CAACG,SALjC,CAOM,KAAKuB,MAAL,CAAc1B,YAAY,CAACC,IAPjC,CAQ6B,CAAhB,EAAAjqB,KAAK,CAAC+tB,MARnB,EASI/tB,KAAK,CAACkuB,cAAN,EATJ,CAUI,KAAKxC,MAAL,CAAc1B,YAAY,CAACE,SAV/B,EAY6B,CAAhB,EAAAlqB,KAAK,CAAC+tB,MAZnB,GAaM,KAAKrC,MAAL,CAAc1B,YAAY,CAACG,SAbjC,EAeE,KAAKE,SAAL,CAAiBrqB,KAAK,CAACG,OAAN,CAAgB0rB,IAAI,CAACp5B,IAfxC,CAgBE,KAAK63B,SAAL,CAAiBtqB,KAAK,CAACE,OAAN,CAAgB2rB,IAAI,CAACn5B,GAhBxC,CAiBE,KAAK63B,eAAL,CAAuB,KAAKF,SAjB9B,CAkBE,KAAKG,eAAL,CAAuB,KAAKF,SAlB9B,CAmBE,KAAKG,kBAAL,CAA0B,KAAKJ,SAnBjC,CAoBE,KAAKK,kBAAL,CAAyB,KAAKJ,SApBhC,KAqBO,CACLc,WAAW,CAAGzC,IAAI,CAACO,OADd,CAEL,GAAInE,YAAW,CAAG,KAAK5iD,KAAL,CAAWi+B,4BAAX,CAChB0tB,kBAAkB,CAACh2D,CADH,CACMg2D,kBAAkB,CAAC/1D,CADzB,CAAlB,CAEA61D,iBAAiB,CAAC7I,WAAD,CAClB,CACF,CA/RqE,CAiSjEoJ,mBAAmB,CAAGnuB,KAAK,EAAI,CAIlC,GAHAotB,UAAU,IAGV,CAFF,KAAK/C,SAAL,CAAiBrqB,KAAK,CAACG,OAAN,CAAgB0rB,IAAI,CAACp5B,IAEpC,CADF,KAAK63B,SAAL,CAAiBtqB,KAAK,CAACE,OAAN,CAAgB2rB,IAAI,CAACn5B,GACpC,CAAI04B,WAAW,GAAKzC,IAAI,CAACO,OAAzB,CAAkC,CAChC,GAAI4E,mBAAkB,CAAG,KAAK3rD,KAAL,CAAW49B,+BAAX,CAA2C,KAAKjP,QAAhD,CAA0DkP,KAA1D,CAAzB,CACA,GAAI8tB,kBAAJ,CAAwB,CACtB,GAAI/I,YAAW,CAAG,KAAK5iD,KAAL,CAAWi+B,4BAAX,CAChB0tB,kBAAkB,CAACh2D,CADH,CACMg2D,kBAAkB,CAAC/1D,CADzB,CAAlB,CAEA61D,iBAAiB,CAAC7I,WAAD,CAClB,CACF,CAPD,IAQO,MAAK2G,MAAL,GAAgBtC,KAAK,CAACR,IAAvB,EAAiC,SAAA+C,aARvC,EASIA,aAAa,CAACyC,IAAd,CAAmB,IAAnB,CAAyBpuB,KAAK,CAACG,OAA/B,CAAwCH,KAAK,CAACE,OAA9C,CAAuD,KAAKpP,QAA5D,CAGN,CAjTsE,CAmTjEu9B,iBAAiB,CAAGruB,KAAK,EAAI,CAChC,KAAK0rB,MAAL,CAActC,KAAK,CAACR,IADY,CAE5BwC,WAAW,EAAIzC,IAAI,CAACO,OAFQ,GAG9BkC,WAAW,CAAGzC,IAAI,CAACE,OAHW,EAI9B8C,aAAa,SAJiB,EAK7B,KAAKpB,eAAL,EAAuBvqB,KAAK,CAACG,OAAN,CAAgB0rB,IAAI,CAACp5B,IAA5C,EAAqD,KAAK+3B,eAAL,EAAuBxqB,KAAK,CAACE,OAAN,CAAe2rB,IAAI,CAACn5B,GALnE,EAMhCi5B,aAAa,CAAC2C,IAAd,CAAmB,IAAnB,CAAyBtuB,KAAK,CAACG,OAA/B,CAAwCH,KAAK,CAACE,OAA9C,CAAuD,KAAKpP,QAA5D,CAGF,CA5TsE,CA8TjEy9B,oBAAoB,CAAG,IAAS,CACrC,KAAK7C,MAAL,CAActC,KAAK,CAACR,IACpB,CAhUsE,CAkUjE4F,oBAAoB,CAAGxuB,KAAK,EAAI,CACnCotB,UAAU,IADyB,CAErC,GAAM5f,IAAG,CAAGxN,KAAK,CAACyuB,OAAN,CAAcr2D,MAA1B,CACA,GAAW,CAAP,EAAAo1C,GAAJ,CACC,KAAKke,MAAL,CAActC,KAAK,CAACI,YADrB,CAEC,KAAKa,SAAL,CAAiBrqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBtuB,OAAjB,CAA2B0rB,IAAI,CAACp5B,IAFlD,CAGC,KAAK63B,SAAL,CAAiBtqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBvuB,OAAjB,CAA2B2rB,IAAI,CAACn5B,GAHlD,CAIC,KAAK63B,eAAL,CAAuB,KAAKF,SAJ7B,CAKC,KAAKG,eAAL,CAAuB,KAAKF,SAL7B,CAMC,KAAKG,kBAAL,CAA0B,KAAKJ,SANhC,CAOC,KAAKK,kBAAL,CAAyB,KAAKJ,SAP/B,KAQO,IAAW,CAAP,EAAA9c,GAAJ,CAAc,CACpB,KAAKke,MAAL,CAActC,KAAK,CAACK,UADA,IAEdiF,GAAE,CAAG1uB,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBtuB,OAAnB,CAA6BH,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBtuB,OAFvC,CAGdwuB,EAAE,CAAG3uB,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBvuB,OAAnB,CAA6BF,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBvuB,OAHvC,CAIpB,KAAK2qB,oBAAL,CAA4B,KAAKD,sBAAL,CAA8BtoD,IAAI,CAACmZ,IAAL,CAAWizC,EAAE,CAAGA,EAAL,CAAUC,EAAE,CAAGA,EAA1B,CAC1D,CALM,IAKW,EAAP,EAAAnhB,GALJ,GAMN,KAAKke,MAAL,CAActC,KAAK,CAACM,SANd,CAON,KAAKkC,aAAL,CAAqB5rB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBG,UAPhC,CAQN,KAAKvE,SAAL,CAAiBrqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBtuB,OAAjB,CAA2B0rB,IAAI,CAACp5B,IAR3C,CASN,KAAK63B,SAAL,CAAiBtqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBvuB,OAAjB,CAA2B2rB,IAAI,CAACn5B,GAT3C,CAUN,KAAK+3B,kBAAL,CAA0B,KAAKJ,SAVzB,CAWN,KAAKK,kBAAL,CAAyB,KAAKJ,SAXxB,CAaP,CA1VsE,CA4VjEuE,mBAAmB,CAAG7uB,KAAK,EAAI,CACpCA,KAAK,CAACkuB,cAAN,EADoC,CAEpCluB,KAAK,CAAC8uB,eAAN,EAFoC,CAGpC,GAAMthB,IAAG,CAAGxN,KAAK,CAACyuB,OAAN,CAAcr2D,MAA1B,CACA,GAAW,CAAP,EAAAo1C,GAAJ,CACC,KAAK6c,SAAL,CAAiBrqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBtuB,OAAjB,CAA2B0rB,IAAI,CAACp5B,IADlD,CAEC,KAAK63B,SAAL,CAAiBtqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBvuB,OAAjB,CAA2B2rB,IAAI,CAACn5B,GAFlD,KAGO,IAAW,CAAP,EAAA8a,GAAJ,EACN,GAAI,KAAKke,MAAL,GAAgBtC,KAAK,CAACK,UAA1B,CAAsC,IAC/BiF,GAAE,CAAG1uB,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBtuB,OAAnB,CAA6BH,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBtuB,OADtB,CAE/BwuB,EAAE,CAAG3uB,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBvuB,OAAnB,CAA6BF,KAAK,CAACyuB,OAAN,CAAe,CAAf,EAAmBvuB,OAFtB,CAGrC,KAAK2qB,oBAAL,CAA4BvoD,IAAI,CAACmZ,IAAL,CAAWizC,EAAE,CAAGA,EAAL,CAAUC,EAAE,CAAGA,EAA1B,CAC5B,CALK,KAMA,IAAW,CAAP,EAAAnhB,GAAJ,EACF,KAAKke,MAAL,GAAgBtC,KAAK,CAACM,SADpB,CAEL,IAAK,GAAIxxD,EAAC,CAAG,CAAb,CAAoB,CAAJ,CAAAA,CAAhB,CAAuBA,CAAC,EAAxB,CACK8nC,KAAK,CAACyuB,OAAN,CAAcv2D,CAAd,EAAiB02D,UAAjB,EAA+B,KAAKhD,aADzC,GAEE,KAAKvB,SAAL,CAAiBrqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBtuB,OAAjB,CAA2B0rB,IAAI,CAACp5B,IAFnD,CAGE,KAAK63B,SAAL,CAAiBtqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBvuB,OAAjB,CAA2B2rB,IAAI,CAACn5B,GAHnD,CAQF,CAnXsE,CAqXjEq8B,kBAAkB,CAAG/uB,KAAK,EAAI,CACnC,GAAMwN,IAAG,CAAGxN,KAAK,CAACyuB,OAAN,CAAcr2D,MAA1B,CACA,KAAKwyD,sBAAL,CAA8B,KAAKC,oBAAL,CAA4B,CAFvB,CAGnC,KAAKe,aAAL,CAAqB,CAAC,CAHa,CAInC,KAAKF,MAAL,CAActC,KAAK,CAACR,IAJe,CAKxB,CAAP,EAAApb,GAL+B,EAM9Bme,aAAa,SANiB,EAO7B,KAAKpB,eAAL,EAAuBvqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBtuB,OAAjB,CAA0B0rB,IAAI,CAACp5B,IAAtD,EAA+D,KAAK+3B,eAAL,EAAuBxqB,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBvuB,OAAjB,CAA0B2rB,IAAI,CAACn5B,GAPxF,EAQhCi5B,aAAa,CAAC2C,IAAd,CAAmB,KAAK1sD,YAAxB,CAAsCo+B,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBtuB,OAAvD,CAAgEH,KAAK,CAACyuB,OAAN,CAAc,CAAd,EAAiBvuB,OAAjF,CAA0F,KAAKpP,QAA/F,CAIH,CAjYsE,CAmYhEk+B,eAAe,CAAG,IAAM,CAC9B5B,UAAU,IACV,CArYsE,CAuYhEA,UAAU,CAAG6B,MAAM,EAAI,CAC3B;AACA,GAAIA,MAAM,EAAIpD,IAAI,SAAlB,CAAkC,CAChC,GAAMqD,SAAQ,CAAG,GAAIC,qBAAJ,CAA0Bl0B,OAAD,EAAa,CACrD,IAAK,GAAM8I,MAAX,GAAoB9I,QAApB,CACE4wB,IAAI,CAAG9nB,KAAK,CAACqrB,kBAAb,CAEFF,QAAQ,CAACG,UAAT,EACD,CALgB,CAAjB,CAOAH,QAAQ,CAACI,OAAT,CAAiB,KAAKl8B,UAAtB,CACD,CACF,CAnZqE,CAqZjEm8B,oBAAoB,CAAGvvB,KAAK,EAAI,CACnCotB,UAAU,IADyB,CAErC,KAAK1B,MAAL,CAActC,KAAK,CAACO,MAFiB,CAGrC,GAAI1/C,QAAO,CAAG,CAAd,CACmB,CAAf,CAAA+1B,KAAK,CAACwvB,MAJ2B,CAKpCvlD,OAAO,CAAG,KAAK6gD,UALqB,CAMb,CAAf,CAAA9qB,KAAK,CAACwvB,MANsB,GAOpCvlD,OAAO,CAAqB,CAAC,CAAnB,MAAK6gD,UAPqB,EAQrCU,WARqC,EAQTvhD,OARS,CASrC+1B,KAAK,CAACkuB,cAAN,EATqC,CAUrCluB,KAAK,CAACyvB,wBAAN,EACA,CAhasE,CAkajEnqD,SAAS,CAAG,IAAM,CACvB,GAAiC,WAA7B,QAAO,MAAK1D,YAAhB,CACA,IACOmsB,OAAM,CAAG89B,IAAI,CAAC99B,MADrB,CAEOhuB,QAAQ,CAAG,KAAK6B,YAAL,CAAkBrF,QAAlB,CAA2B8D,UAA3B,CAAsC,KAAKuB,YAAL,CAAkB+wB,MAAxD,CAFlB,CAGK+8B,IAAI,CAAG,CAHZ,CAIM,KAAK9tD,YAAL,CAAkB+pB,GAAlB,CAAwB,KAAK/pB,YAAL,CAAkB8pB,IAA3C,EAAqD3rB,QAAQ,EAAI,KAAK6B,YAAL,CAAkB8pB,IAAnF,EACF3rB,QAAQ,EAAI,KAAK6B,YAAL,CAAkB+pB,GALjC,GAOG+jC,IAAI,CAAG,CAAC3vD,QAAQ,CAAC,KAAK6B,YAAL,CAAkB8pB,IAA5B,GAAmC,KAAK9pB,YAAL,CAAkB+pB,GAAlB,CAAsB,KAAK/pB,YAAL,CAAkB8pB,IAA3E,CAPV,EAUCqgC,EAAE,CAAChrD,GAAH,CAAO,KAAK0pD,kBAAZ,CAA+B18B,MAAM,CAAG,KAAK28B,kBAA7C,CAAgE,CAAhE,CAVD,CAWCsB,EAAE,CAACjrD,GAAH,CAAO,KAAK0pD,kBAAZ,CAAgC18B,MAAM,CAAG,KAAK28B,kBAA9C,CAAiE,CAAjE,CAXD,CAYCuB,MAAM,CAAClrD,GAAP,CAAW,KAAKspD,SAAhB,CAA0Bt8B,MAAM,CAAG,KAAKu8B,SAAxC,CAAkD,CAAlD,CAZD,CAaC4B,MAAM,CAACnrD,GAAP,CAAW,KAAKspD,SAAhB,CAA0Bt8B,MAAM,CAAG,KAAKu8B,SAAxC,CAAkD,CAAlD,CAbD,CAcCyB,EAAE,CAAC4D,SAAH,CAAa,KAAK/tD,YAAlB,CAdD,CAeCoqD,EAAE,CAAC2D,SAAH,CAAa,KAAK/tD,YAAlB,CAfD,CAgBCqqD,MAAM,CAAC0D,SAAP,CAAiB,KAAK/tD,YAAtB,CAhBD,CAiBCsqD,MAAM,CAACyD,SAAP,CAAkB,KAAK/tD,YAAvB,CAjBD,CAmBIqqD,MAAM,CAACjgC,GAAP,CAAW+/B,EAAX,EAAetrD,cAAf,CAA8B,EAAIivD,IAAlC,CAnBJ,CAoBIxD,MAAM,CAAClgC,GAAP,CAAWggC,EAAX,EAAevrD,cAAf,CAA8BivD,IAA9B,CApBJ,CAqBIzD,MAAM,CAACjwD,GAAP,CAAWkwD,MAAX,EAAmBzrD,cAAnB,CAHuB,CAAC,IAGxB,CArBJ,CAsBImtD,iBAAiB,CAAC3B,MAAD,CACpB,CACD,KAAKxB,kBAAL,CAA0B,KAAKJ,SA1BR,CA2BvB,KAAKK,kBAAL,CAA0B,KAAKJ,SAC/B,CA9bsE,CAgcvE,KAAKsF,qCAAL,CAA6C,CAACC,IAAD,CAAO7qD,KAAP,GAAiB,CACzD6qD,IAAI,CAAClrD,SAAL,EADyD,CAE1DynD,EAAE,CAAC3kD,IAAH,CAAQ,KAAK7F,YAAL,CAAkBrF,QAA1B,EAAoCyvB,GAApC,CAAwC,KAAKpqB,YAAL,CAAkB+wB,MAA1D,CAF0D,CAG1D05B,QAAQ,CAAC5kD,IAAT,CAAc2kD,EAAd,CAH0D,CAI1DA,EAAE,CAACznD,SAAH,EAJ0D,CAKtD,GAAMrC,IAAI,CAAC+3C,GAAL,CAAS+R,EAAE,CAAC0D,GAAH,CAAOD,IAAP,CAAT,CALgD,EAMxDzD,EAAE,CAAC3kD,IAAH,CAAQ,KAAK7F,YAAL,CAAkBmuD,EAA1B,CANwD,CAQzDhE,EAAE,CAAC5sB,YAAH,CAAgB0wB,IAAhB,CAAsBzD,EAAtB,EAA0BznD,SAA1B,EARyD,CASzDqnD,EAAE,CAAC7sB,YAAH,CAAgB0wB,IAAhB,CAAsB9D,EAAtB,CATyD,IAUpDiE,SAAQ,CAAGH,IAAI,CAACC,GAAL,CAASzD,QAAT,CAVyC,CAWpD4D,QAAQ,CAAGlE,EAAE,CAAC+D,GAAH,CAAOzD,QAAP,CAXyC,CAYpD6D,QAAQ,CAAGlE,EAAE,CAAC8D,GAAH,CAAOzD,QAAP,CAZyC,CAapD8D,GAAG,CAAGN,IAAI,CAACC,GAAL,CAAS,KAAKluD,YAAL,CAAkBmuD,EAA3B,CAb8C,CAcpDK,GAAG,CAAGrE,EAAE,CAAC+D,GAAH,CAAO,KAAKluD,YAAL,CAAkBmuD,EAAzB,CAd8C,CAepDM,GAAG,CAAGrE,EAAE,CAAC8D,GAAH,CAAO,KAAKluD,YAAL,CAAkBmuD,EAAzB,CAf8C,CAgBpDO,SAAS,CAAGhuD,IAAI,CAACiuD,GAAL,CAASvrD,KAAT,CAhBwC,CAiBpDwrD,SAAS,CAAGluD,IAAI,CAACmuD,GAAL,CAASzrD,KAAT,CAjBwC,CA+B1D,MAbCinD,OAAM,CAAClrD,GAAP,CAAWuvD,SAAS,CAACvE,EAAE,CAACj0D,CAAb,CAAe04D,SAAS,CAACxE,EAAE,CAACl0D,CAAvC,CACaw4D,SAAS,CAACvE,EAAE,CAACh0D,CAAb,CAAey4D,SAAS,CAACxE,EAAE,CAACj0D,CADzC,CAEau4D,SAAS,CAACvE,EAAE,CAACvqD,CAAb,CAAegvD,SAAS,CAACxE,EAAE,CAACxqD,CAFzC,CAaD,CAVA0qD,MAAM,CAACnrD,GAAP,CAAWuvD,SAAS,CAACtE,EAAE,CAACl0D,CAAb,CAAe04D,SAAS,CAACzE,EAAE,CAACj0D,CAAvC,CACcw4D,SAAS,CAACtE,EAAE,CAACj0D,CAAb,CAAey4D,SAAS,CAACzE,EAAE,CAACh0D,CAD1C,CAEcu4D,SAAS,CAACtE,EAAE,CAACxqD,CAAb,CAAegvD,SAAS,CAACzE,EAAE,CAACvqD,CAF1C,CAUA,CAPC4qD,EAAE,CAAC3kD,IAAH,CAAQ,KAAK7F,YAAL,CAAkB+wB,MAA1B,CAOD,CANAy5B,EAAE,CAACt0D,CAAH,CAAOs0D,EAAE,CAACt0D,CAAH,CAAO+3D,IAAI,CAAC/3D,CAAL,CAAOk4D,QAAd,CAAyB/D,MAAM,CAACn0D,CAAP,CAASm4D,QAAlC,CAA2C/D,MAAM,CAACp0D,CAAP,CAASo4D,QAM3D,CALA9D,EAAE,CAACr0D,CAAH,CAAOq0D,EAAE,CAACr0D,CAAH,CAAO83D,IAAI,CAAC93D,CAAL,CAAOi4D,QAAd,CAAyB/D,MAAM,CAACl0D,CAAP,CAASk4D,QAAlC,CAA2C/D,MAAM,CAACn0D,CAAP,CAASm4D,QAK3D,CAJA9D,EAAE,CAAC5qD,CAAH,CAAO4qD,EAAE,CAAC5qD,CAAH,CAAOquD,IAAI,CAACruD,CAAL,CAAOwuD,QAAd,CAAyB/D,MAAM,CAACzqD,CAAP,CAASyuD,QAAlC,CAA2C/D,MAAM,CAAC1qD,CAAP,CAAS0uD,QAI3D,CAHApE,EAAE,CAAC/qD,GAAH,CAAO8uD,IAAI,CAAC/3D,CAAL,CAAOq4D,GAAP,CAAWlE,MAAM,CAACn0D,CAAP,CAASs4D,GAApB,CAAwBlE,MAAM,CAACp0D,CAAP,CAASu4D,GAAxC,CACOR,IAAI,CAAC93D,CAAL,CAAOo4D,GAAP,CAAWlE,MAAM,CAACl0D,CAAP,CAASq4D,GAApB,CAAwBlE,MAAM,CAACn0D,CAAP,CAASs4D,GADxC,CAEOR,IAAI,CAACruD,CAAL,CAAO2uD,GAAP,CAAWlE,MAAM,CAACzqD,CAAP,CAAS4uD,GAApB,CAAwBlE,MAAM,CAAC1qD,CAAP,CAAS6uD,GAFxC,CAGA,CAAO,CAAC9zD,QAAQ,CAAE6vD,EAAX,CAAe2D,EAAE,CAAEjE,EAAnB,CACV,CAhesE,CAwevE,KAAKxsB,sBAAL,CAA8B,CAACuwB,IAAD,CAAO7qD,KAAP,GAAiB,CAC7C,GAAM0rD,gBAAe,CAAG,KAAKd,qCAAL,CAA2CC,IAA3C,CAAiD7qD,KAAjD,CAAxB,CACA,KAAKpD,YAAL,CAAkBrF,QAAlB,CAA2BkL,IAA3B,CAAgCipD,eAAe,CAACn0D,QAAhD,CAF6C,CAG7C,KAAKs4B,sBAAL,EAH6C,CAI7C,KAAKjzB,YAAL,CAAkBmuD,EAAlB,CAAqBtoD,IAArB,CAA0BipD,eAAe,CAACX,EAA1C,CACD,CA7esE,IA+ejEY,OAAM,CAAG,IAAM,CACpB,GAAiC,WAA7B,QAAO,MAAK/uD,YAAhB,CACA,IACO0qB,MAAK,CAAGu/B,IAAI,CAACv/B,KADpB,CAEOyB,MAAM,CAAG89B,IAAI,CAAC99B,MAFrB,CAGC,GAAK,EAAEzB,KAAH,EAAY,EAAEyB,MAAlB,CACA,IACOjnB,OAAM,CAAC,KAAMwlB,KAAK,CAACyB,MAAZ,CADd,CAEK6iC,OAAO,CAAG,CAFf,CAGKC,OAAO,CAAG,CAHf,EAISpF,UAAU,GAAK7B,gBAAgB,CAACC,IAAhC,EACF4B,UAAU,GAAK7B,gBAAgB,CAACE,UALvC,IAMG8G,OAAO,CAAC,KAAKvG,SAAL,CAAe,KAAKI,kBAN/B,GAOSgB,UAAU,GAAK7B,gBAAgB,CAACC,IAAhC,EACA4B,UAAU,GAAK7B,gBAAgB,CAACG,QARzC,IASG8G,OAAO,CAAC,KAAKnG,kBAAL,CAAwB,KAAKJ,SATxC,EAUC,GAAMwG,aAAY,CAAGxuD,IAAI,CAACmZ,IAAL,CAAUm1C,OAAO,CAACA,OAAR,CAAkBC,OAAO,CAACA,OAApC,CAArB,CACA,GAAmB,CAAf,CAAAC,YAAJ,CACA,IACOpC,GAAE,CAAU,CAAT,EAACmC,OAAD,CAAaC,YADvB,CAEOnC,EAAE,CAAS,CAAR,CAAAiC,OAAO,CAAKE,YAFtB,CAIM;AACA,GAAIrF,UAAU,GAAK7B,gBAAgB,CAACC,IAApC,CAA0C,CACxC,GAAIvoC,GAAC,CAACotC,EAAE,EAAE,KAAKrE,SAAL,CAAe,IAAK/9B,KAAK,CAAC,CAAX,CAAjB,CAAF,CAAkCqiC,EAAE,EAAE,IAAK5gC,MAAM,CAAC,CAAZ,EAAe,KAAKu8B,SAAtB,CAA1C,CACIhpC,EAAC,CAAGxa,MAFgC,CAGtCwa,EAAC,CAAGxa,MAHkC,CAMlCwa,EAAC,CAAG,CAACxa,MAN6B,GAOpCwa,EAAC,CAAG,CAACxa,MAP+B,CAUzC,CAfP,GAgBOiqD,IAAG,CAACzuD,IAAI,CAAC0uD,IAAL,CAbG,CAaO,CAAElqD,MAAZ,EAAoB,GAAIxE,IAAI,CAAC2uD,EAhBxC,CAiBOjsD,KAAK,CAAC,KAAKolD,WAAL,CAAiB0G,YAAjB,CAA8BhqD,MAjB3C,CAkBCglD,EAAE,CAACrkD,IAAH,CAAQ,KAAK7F,YAAL,CAAkBrF,QAA1B,EAAoCyvB,GAApC,CAAwC,KAAKpqB,YAAL,CAAkB+wB,MAA1D,EAAkEhuB,SAAlE,EAlBD,CAmBConD,EAAE,CAACtkD,IAAH,CAAQ,KAAK7F,YAAL,CAAkBmuD,EAA1B,EAA8BprD,SAA9B,EAnBD,CAoBMqnD,EAAE,CAACvkD,IAAH,CAAQskD,EAAR,EAAYvkD,KAAZ,CAAkBskD,EAAlB,EAAsBnnD,SAAtB,GAAkClE,cAAlC,CAAiDiuD,EAAjD,CApBN,CAqBM3C,EAAE,CAACtrD,cAAH,CAAkBkuD,EAAlB,CArBN,CAsBMxC,KAAK,CAAC1sB,UAAN,CAAiBusB,EAAjB,CAAqBD,EAArB,EAAyBtrD,cAAzB,CAAwC6B,IAAI,CAACiuD,GAAL,CAASQ,GAAT,CAAxC,CAtBN,CAuBMjF,EAAE,CAACrrD,cAAH,CAAkB6B,IAAI,CAACmuD,GAAL,CAASM,GAAT,CAAlB,CAvBN,CAwBM5E,KAAK,CAACnwD,GAAN,CAAU8vD,EAAV,CAxBN,CAyBC,KAAKxsB,sBAAL,CAA4B6sB,KAA5B,CAAmC,CAACnnD,KAApC,CACA,CACD,CACD,CACD,KAAKylD,kBAAL,CAA0B,KAAKJ,SA/CX,CAgDpB,KAAKK,kBAAL,CAA0B,KAAKJ,SAC/B,CAhiBsE,CAkiBjE4G,kBAAkB,CAAG,IAAM,CAChC,GAAIxuD,MAAK,CAAG,CAAZ,CAUA,MATI,MAAKgpD,MAAL,GAAgBtC,KAAK,CAACE,IAS1B,CAPC5mD,KAAK,CAAG,KAAKgoD,kBAAL,CAAwB,KAAKJ,SAOtC,CANW,KAAKoB,MAAL,GAAgBtC,KAAK,CAACO,MAMjC,CALCjnD,KAAK,CAAG8oD,WAKT,EAHC9oD,KAAK,CAAG,CAAC,CAAD,EAAQ,KAAKmoD,oBAAL,CAA4B,KAAKD,sBAAzC,CAGT,CAFC,KAAKA,sBAAL,CAA8B,KAAKC,oBAEpC,EAAOnoD,KACN,CA9iBqE,CAgjBtE,KAAKw3B,0BAAL,CAAkCC,IAAI,EAAI,CACxC,GAAM02B,QAAO,CAAG12B,IAAI,CAAG,KAAK2wB,UAA5B,CACA,KAAKqG,iBAAL,CAAuBN,OAAvB,CACD,CAnjBqE,CAqjBtE,KAAKM,iBAAL,CAAyBN,OAAO,EAAI,CACpC,GAAiC,WAA7B,QAAO,MAAKjvD,YAAhB,CACA,IACO0qB,MAAK,CAAGu/B,IAAI,CAACv/B,KADpB,CAEUyB,MAAM,CAAG89B,IAAI,CAAC99B,MAFxB,CAIOx1B,CAAC,CAAG,KAAKqJ,YAAL,CAAkBrF,QAAlB,CAA2BjB,KAA3B,EAJX,CAKC/C,CAAC,CAACyzB,GAAF,CAAM,KAAKpqB,YAAL,CAAkB+wB,MAAxB,CALD,IAMOy+B,KAAI,CAAG74D,CAAC,CAACH,MAAF,EANd,CAOOu2D,EAAE,CAAG,IAAMkC,OAAN,CAAc9iC,MAP1B,CAQC,GAAuB,GAAnB,CAACqjC,IAAI,CAAGzC,EAAE,CAACyC,IAAf,GACC74D,CAAC,CAACoM,SAAF,EADD,CAEK4nD,QAAQ,CAAC9kD,IAAT,CAAc,KAAK7F,YAAL,CAAkBrF,QAAhC,CAFL,CAGCgwD,QAAQ,CAACz0D,CAAT,EAAcS,CAAC,CAACT,CAAF,CAAI62D,EAAJ,CAAOyC,IAHtB,CAIC7E,QAAQ,CAACx0D,CAAT,EAAcQ,CAAC,CAACR,CAAF,CAAI42D,EAAJ,CAAOyC,IAJtB,CAKC7E,QAAQ,CAAC/qD,CAAT,EAAcjJ,CAAC,CAACiJ,CAAF,CAAImtD,EAAJ,CAAOyC,IALtB,CAMS1D,mBAAmB,EAN5B,EAMgC,CACzB,KAAK9rD,YAAL,CAAkBrF,QAAlB,CAA2BkL,IAA3B,CAAgC8kD,QAAhC,CADyB,CAEzB,KAAK13B,sBAAL,EAFyB,CAGzB,GAAMw8B,uBAAsB,CAAG,IAA/B,CACA,GAAKA,sBAAsB,CAAG,KAAKzvD,YAAL,CAAkB+pB,GAA5C,CACD,KAAK/pB,YAAL,CAAkB8pB,IAAlB,CAAyBijC,EAAE,CAACyC,IAA5B,CAAmC,KAAKzG,mBAD3C,CAEkC,CAA5B,OAAKA,mBAFX,GAGI,KAAKA,mBAAL,EAA4BgE,EAAE,CAACyC,IAHnC,CAImC,CAA3B,MAAKzG,mBAJb,EAKM,KAAK/oD,YAAL,CAAkB8pB,IAAlB,EAA0B,KAAKi/B,mBALrC,CAMM,KAAK/oD,YAAL,CAAkB+pB,GAAlB,EAAyB,KAAKg/B,mBANpC,CAOM,KAAKA,mBAAL,CAA2B,CAPjC,GAUM,KAAK/oD,YAAL,CAAkB8pB,IAAlB,EAA0BijC,EAAE,CAACyC,IAVnC,CAWM,KAAKxvD,YAAL,CAAkB+pB,GAAlB,EAAyBgjC,EAAE,CAACyC,IAXlC,OAeK,CACH,GAAgC,CAA5B,OAAKzG,mBAAT,CAAqC,CACnC,GAAMhgD,KAAI,CAAG,KAAK/I,YAAL,CAAkB8pB,IAAlB,CAAyB2lC,sBAAsB,CAAG,KAAKzvD,YAAL,CAAkB+pB,GAAjF,CACA,KAAK/pB,YAAL,CAAkB8pB,IAAlB,CAAyB2lC,sBAAsB,CAAG,KAAKzvD,YAAL,CAAkB+pB,GAFjC,CAGnC,KAAK/pB,YAAL,CAAkB+pB,GAAlB,EAAyBhhB,IAHU,CAInC,KAAKggD,mBAAL,EAA4B0G,sBAAsB,CAAG,KAAKzvD,YAAL,CAAkB+pB,GACxE,CACD,KAAKg/B,mBAAL,EAA4BgE,EAAE,CAACyC,IAChC,CACF,CAEN,CACA,CApmBqE,CAsmBvE,GAAME,QAAO,CAAG,IAAM,CACnB,GAAMT,QAAO,CAAGK,kBAAkB,EAAlC,CACA,KAAKC,iBAAL,CAAuBN,OAAvB,CAFmB,CAIjB,KAAKnF,MAAL,GAAgBtC,KAAK,CAACE,IAJL,GAKpB,KAAKmB,kBAAL,CAA0B,KAAKJ,SALX,CAMpB,KAAKK,kBAAL,CAA0B,KAAKJ,SANX,EAQjB,KAAKoB,MAAL,GAAgBtC,KAAK,CAACO,MARL,GASpB6B,WAAW,CAAG,CATM,CAUjB,KAAKE,MAAL,CAActC,KAAK,CAACR,IAVH,CAYrB,CAZD,CAcA,KAAKpuB,mBAAL,CAA2B+2B,kBAAkB,EAAI,CAChD,KAAKz4B,gBAAL,CAAwBy4B,kBACxB,CAtnBsE,CA2nBvE,KAAK18B,sBAAL,CAA8B,IAAM,CACN,CAAzB,OAAKiE,gBAD0B,EAElC,KAAKA,gBAAL,CAAsBv8B,QAAtB,CAA+BwE,GAA/B,CAAmC,KAAKa,YAAL,CAAkBrF,QAAlB,CAA2BzE,CAA9D,CACE,KAAK8J,YAAL,CAAkBrF,QAAlB,CAA2BxE,CAD7B,CAEE,KAAK6J,YAAL,CAAkBrF,QAAlB,CAA2BiF,CAF7B,CAID,CAjoBsE,CAsoBvE,KAAKK,MAAL,CAAc,UAAY,CACzB4J,OAAO,GADkB,CAErB,KAAK2nB,UAAL,EAAmB,KAAKA,UAAL,CAAgBo+B,gBAFd,GAGxB,KAAKp+B,UAAL,CAAgBo+B,gBAAhB,CAAkC,WAAlC,CAA+C3D,mBAA/C,IAHwB,CAIxB,KAAKz6B,UAAL,CAAgBo+B,gBAAhB,CAAkC,WAAlC,CAA+CrD,mBAA/C,IAJwB,CAKxB,KAAK/6B,UAAL,CAAgBo+B,gBAAhB,CAAkC,SAAlC,CAA6CnD,iBAA7C,IALwB,CAMxB,KAAKj7B,UAAL,CAAgBo+B,gBAAhB,CAAkC,YAAlC,CAAgDjD,oBAAhD,IANwB,CAOxB,KAAKn7B,UAAL,CAAgBo+B,gBAAhB,CAAkC,YAAlC,CAAgDhD,oBAAhD,IAPwB,CAQxB,KAAKp7B,UAAL,CAAgBo+B,gBAAhB,CAAkC,WAAlC,CAA+C3C,mBAA/C,IARwB,CASxB,KAAKz7B,UAAL,CAAgBo+B,gBAAhB,CAAkC,UAAlC,CAA8CzC,kBAA9C,IATwB,CAUxB,KAAK37B,UAAL,CAAgBo+B,gBAAhB,CAAkC,OAAlC,CAA2CjC,oBAA3C,IAVwB,CAWxB,KAAKn8B,UAAL,CAAgBo+B,gBAAhB,CAAkC,aAAlC,CAAiDxxB,KAAK,EAAI,CAAEA,KAAK,CAACkuB,cAAN,EAAyB,CAArF,IAXwB,CAYrB,KAAK96B,UAAL,CAAgBo+B,gBAAhB,CAAkC,YAAlC,CAAgDxC,eAAhD,IAZqB,CAczB,CAppBsE,CAypBvE,KAAK3tD,OAAL,CAAe,UAAY,CAC1BoK,OAAO,GADmB,CAEtB,KAAK2nB,UAAL,EAAmB,KAAKA,UAAL,CAAgBq+B,mBAFb,GAGzB,KAAKr+B,UAAL,CAAgBq+B,mBAAhB,CAAqC,WAArC,CAAkD5D,mBAAlD,IAHyB,CAIzB,KAAKz6B,UAAL,CAAgBq+B,mBAAhB,CAAqC,WAArC,CAAkDtD,mBAAlD,IAJyB,CAKzB,KAAK/6B,UAAL,CAAgBq+B,mBAAhB,CAAqC,SAArC,CAAgDpD,iBAAhD,IALyB,CAMzB,KAAKj7B,UAAL,CAAgBq+B,mBAAhB,CAAqC,YAArC,CAAmDlD,oBAAnD,IANyB,CAOzB,KAAKn7B,UAAL,CAAgBq+B,mBAAhB,CAAqC,YAArC,CAAmDjD,oBAAnD,IAPyB,CAQzB,KAAKp7B,UAAL,CAAgBq+B,mBAAhB,CAAqC,WAArC,CAAkD5C,mBAAlD,IARyB,CASzB,KAAKz7B,UAAL,CAAgBq+B,mBAAhB,CAAqC,UAArC,CAAiD1C,kBAAjD,IATyB,CAUzB,KAAK37B,UAAL,CAAgBq+B,mBAAhB,CAAqC,OAArC,CAA8ClC,oBAA9C,IAVyB,CAWtB,KAAKn8B,UAAL,CAAgBq+B,mBAAhB,CAAqC,YAArC,CAAmDzC,eAAnD,IAXsB,CAYzB,KAAK57B,UAAL,CAAgBq+B,mBAAhB,CAAqC,aAArC,CAAoDzxB,KAAK,EAAI,CAAEA,KAAK,CAACkuB,cAAN,EAAyB,CAAxF,IAZyB,CAc1B,CAvqBsE,CAyqBvE,KAAKwD,QAAL,CAAgBC,QAAQ,EAAI,CAC3B5G,UAAU,CAAG4G,QAAQ,CAACC,UADK,CAE3B5G,mBAAmB,CAAG2G,QAAQ,CAACE,cAC/B,CA5qBsE,CAqrBvE,KAAKC,WAAL,CAAmB,CAACC,QAAD,CAAWx4C,cAAX,GAA8B,CAChD,GAAM0qB,QAAO,CAAG,GAAI7zB,eAApB,CACA6zB,OAAO,CAAC3zB,kBAAR,CAA6B,IAAM,CAC/B,GAA0B,CAAtB,EAAA2zB,OAAO,CAAC1zB,UAAR,EAA6C,GAAlB,EAAA0zB,OAAO,CAACzzB,MAAvC,CAAsD,CAClD,GAAMmhD,SAAQ,CAAGzxC,IAAI,CAAChG,KAAL,CAAW+pB,OAAO,CAACxzB,YAAnB,CAAjB,CACA,KAAKihD,QAAL,CAAcC,QAAd,CAFkD,CAG7Cp4C,cAAc,MAAd,EAAyD,UAAzB,QAAOA,eAHM,EAI/CA,cAAc,EACpB,CACJ,CAT+C,CAUhD4qB,UAAU,CAAGv0B,UAAU,CAACmiD,QAAD,CAVyB,CAWhD9tB,OAAO,CAAC5zB,IAAR,CAAa,KAAb,CAAoB8zB,UAApB,IAXgD,CAYhDF,OAAO,CAACvzB,IAAR,EACA,CAlsBsE,CAysBvE,KAAK4tB,eAAL,CAAuBxjC,UAAU,EAAI,CAClChB,QAAQ,CAAGgB,UADuB,CAE9BuwD,4BAF8B,EAGhCA,4BAA4B,CAACxwD,WAA7B,CAAyCf,QAAzC,CAHgC,CAI9BwxD,4BAJ8B,EAKhCA,4BAA4B,CAACzwD,WAA7B,CAAyCf,QAAzC,CACJ,CA/sBsE,CAutBtE,KAAK47B,WAAL,CAAmB,IACTxE,QAxtB4D,CAiuBvE,KAAKyE,WAAL,CAAmBC,UAAU,EAAI,CAChC1E,QAAQ,CAAG0E,UACX,CAnuBsE,CAquBtE;;;;;;KAOD,GAAMo8B,WAAU,CAAGtvD,KAAK,EAAI,CAC3B,GAAIC,WAAU,CAAGhJ,WAAW,CAAG+I,KAA/B,CACIC,UAAU,CAAG7I,QAFU,GAG1B6I,UAH0B,EAGA7I,QAHA,EAI3BH,WAAW,CAAGgJ,UACd,CALD,CAOC;;;;KAKA,KAAKsvD,OAAL,CAAe,IACLt4D,WAzvB4D,CAkwBvE,KAAK4jC,OAAL,CAAe20B,MAAM,EAAI,CAErBv4D,WAFqB,CACnBu4D,MAAM,CAAGp4D,QADU,CAEPA,QAFO,CAGL,CAAT,CAAAo4D,MAHc,CAIP,CAJO,CAMPA,MACjB,CAzwBsE,CAixBvE,KAAKC,oBAAL,CAA4B,IACpBnH,mBAlxB+D,CA2xBvE,KAAKoH,mBAAL,CAA2B,IAAM,CAC/B,GAA0B,CAAtB,CAAApH,mBAAJ,CAA6B,IACtB5tC,aAAY,CAAGzjB,WAAW,CAACG,QAAZ,EAAwBkxD,mBAAmB,CAAG,CAA9C,CADO,CAEtB3tC,YAAY,CAAI/a,IAAI,CAAC8O,KAAL,CAAWgM,YAAX,CAFM,CAItBG,SAAS,CAAIjb,IAAI,CAACkb,IAAL,CAAUJ,YAAV,CAJS,OAKxBC,aAAY,EAAIE,SALQ,CAMvBF,YAAY,EAAI2tC,mBAAmB,CAAG,CANf,CAOnB,CAAC3tC,YAAY,CAAG,CAAhB,CAAmBE,SAAnB,CAA8B,CAA9B,CAPmB,CASnB,CAACF,YAAD,CAAeE,SAAS,CAAG,CAA3B,CAA8B,CAA9B,CATmB,CAYrB,CAACF,YAAD,CAAeE,SAAf,CATY,GAAKH,YAAY,CAAGC,YAApB,CASZ,CACP,CAd8B,MAcG,EAAvB,EAAA2tC,mBAdoB,CAetB,CAAC,CAAD,CAAI,CAAJ,CAAO,CAAP,CAfsB,OAmBhC,CA9yBsE,CAqzBvE,KAAKqH,mBAAL,CAA2BC,eAAe,EAAI,CACjB,CAAtB,CAAAtH,mBADuC,GAE3CrxD,WAAW,CAAGG,QAAQ,CAAGw4D,eAAX,EAA8BtH,mBAAmB,CAAG,CAApD,CAF6B,CAGzB,CAAd,CAAArxD,WAHuC,GAI1CA,WAAW,CAAG,CAJ4B,EAKvCA,WAAW,CAAGG,QALyB,GAM1CH,WAAW,CAAGG,QAN4B,EAQ7C,CA7zBsE,CA+zBtE;;;;KAKD,GAAMy4D,WAAU,CAAG7vD,KAAK,EAAI,CAC3B,GAAI0oD,WAAW,GAAKzC,IAAI,CAACG,IAAzB,GACCkJ,UAAU,CAACtvD,KAAD,CADX,CAEKqoD,UAFL,EAEiB,CAQf,OAPMyH,WAAU,CAAG,KAAKJ,mBAAL,EAOnB,CANM/0C,YAAY,CAAGm1C,UAAU,CAAC,CAAD,CAM/B,CALMj1C,SAAS,CAAGi1C,UAAU,CAAC,CAAD,CAK5B,CAJMl1C,UAAU,CAAGk1C,UAAU,CAAC,CAAD,CAI7B,CAHMC,OAAO,CAAG,CAAC1H,UAAU,CAAc,CAAb,CAAA1tC,YAAD,CAAX,CAA6B0tC,UAAU,CAAc,CAAb,CAAA1tC,YAAY,CAAG,CAAhB,CAAvC,CAA2D0tC,UAAU,CAAc,CAAb,CAAA1tC,YAAY,CAAG,CAAhB,CAArE,CAGhB,CAFMq1C,OAAO,CAAG,CAAC3H,UAAU,CAAW,CAAV,CAAAxtC,SAAD,CAAX,CAA0BwtC,UAAU,CAAW,CAAV,CAAAxtC,SAAS,CAAG,CAAb,CAApC,CAAqDwtC,UAAU,CAAW,CAAV,CAAAxtC,SAAS,CAAG,CAAb,CAA/D,CAEhB,CADM5B,iBAAiB,CAAG,EAC1B,CAASzjB,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGu6D,OAAO,CAACr6D,MAA5B,CAAoCF,CAAC,EAArC,CACCyjB,iBAAiB,CAAC/iB,IAAlB,CAAuB0kB,UAAU,CAAGm1C,OAAO,CAACv6D,CAAD,CAApB,CAA0B,CAAC,EAAMolB,UAAP,EAAqBo1C,OAAO,CAACx6D,CAAD,CAA7E,EAED,KAAK0J,YAAL,CAAkBrF,QAAlB,CAA2BwE,GAA3B,CAA+B4a,iBAAiB,CAAC,CAAD,CAAhD,CAAqDA,iBAAiB,CAAC,CAAD,CAAtE,CAA2EA,iBAAiB,CAAC,CAAD,CAA5F,CAXe,CAYf,KAAK/Z,YAAL,CAAkB+wB,MAAlB,CAAyB5xB,GAAzB,CAA6B2xD,OAAO,CAAC,CAAD,CAApC,CAAyCA,OAAO,CAAC,CAAD,CAAhD,CAAqDA,OAAO,CAAC,CAAD,CAA5D,CAZe,CAaXxH,wBAbW,EAcd,KAAKtpD,YAAL,CAAkB8D,MAAlB,CAA0B,KAAK9D,YAAL,CAAkB+wB,MAA5C,CAdc,CAeXs4B,uBAfW,GAgBd,KAAKnyB,gBAAL,CAAsBv8B,QAAtB,CAA+BwE,GAA/B,CAAmC4a,iBAAiB,CAAC,CAAD,CAApD,CAAyDA,iBAAiB,CAAC,CAAD,CAA1E,CAA+EA,iBAAiB,CAAC,CAAD,CAAhG,CAhBc,CAiBd,KAAKmd,gBAAL,CAAsBnG,MAAtB,CAA6Bp2B,QAA7B,CAAsCwE,GAAtC,CAA0C2xD,OAAO,CAAC,CAAD,CAAjD,CAAsDA,OAAO,CAAC,CAAD,CAA7D,CAAkEA,OAAO,CAAC,CAAD,CAAzE,CAjBc,CAmBf,CAEF,CAxBD,CA0BC;;KAGD,KAAKC,gBAAL,CAAwB,IAAM,CAC5BJ,UAAU,CAAC,CAAD,CACX,CAn2BsE,CAq2BtE;AACA,GAAMK,kBAAiB,CAAG,IAAM,CACzB,KAAKlH,MAAL,GAAgBtC,KAAK,CAACC,MAAvB,EAAmC,KAAKqC,MAAL,GAAgBtC,KAAK,CAACI,YAD/B,CAG5BmH,MAAM,EAHsB,CAIlB,KAAKjF,MAAL,GAAgBtC,KAAK,CAACG,GAAvB,EAAgC,KAAKmC,MAAL,GAAgBtC,KAAK,CAACM,SAJnC,EAK5BpkD,SAAS,EALmB,CAM5BknD,UAAU,CAACqG,eAAX,EAN4B,GAOlB,KAAKnH,MAAL,GAAgBtC,KAAK,CAACE,IAAvB,EAAiC,KAAKoC,MAAL,GAAgBtC,KAAK,CAACK,UAAvD,EAAuE,KAAKiC,MAAL,GAAgBtC,KAAK,CAACO,MAP1E,IAQ5B6C,UAAU,CAACsG,IAAX,CAAgB5B,kBAAkB,EAAlC,CAR4B,CAS5B,KAAKzG,kBAAL,CAA0B,KAAKJ,SATH,CAU5B,KAAKK,kBAAL,CAA0B,KAAKJ,SAVH,CAWxB,KAAKoB,MAAL,GAAgBtC,KAAK,CAACO,MAXE,GAY1B,KAAK+B,MAAL,CAActC,KAAK,CAACR,IAZM,EAc5B4C,WAAW,CAAG,CAdc,CAe5BgB,UAAU,CAACqG,eAAX,EAf4B,CAiB/B,CAjBD,CAmBA;;;;KAz3BsE,CAg7BtE;;KAh7BsE,CAu7BtE;;KAv7BsE,CA87BtE;;;;KA97BsE,CAu8BtE;;;;;KAv8BsE,CAi9BtE;;KAj9BsE,CAy9BtE;;KAz9BsE,CAm+BtE;;KAn+BsE,CA6+BtE;;KA7+BsE,CA8/BtE;;;;KA9/BsE,CAqhCtE;;;;;;;;;;;KArhCsE,CAqkCtE;;;;KArkCsE,CAkmCtE;;;;;;;;;;KAlmCsE,CAmnCtE;;;;;;;;;;;KAnnCsE,CAqoCtE;;;;KAroCsE,CAipCtE;;KAjpCsE,CAwpCtE;;;KAxpCsE,CAkqCtE;;KAlqCsE,CA0qCtE;;;;;;;;;;KA1qCsE,CAyrCtE;;KAzrCsE,CAgsCtE;;KAhsCsE,CAwsCtE;;KAxsCsE,CAgtCtE;;;;KAhtCsE,CAytCtE;;;;;;;;KAztCsE,CAuuCtE;;KAvuCsE,CA+uCtE;;;;KA/uCsE,CAwvCtE;;KAxvCsE,CAowCtE;;KAtYD,KAAKv0D,MAAL,CAAcJ,WAAW,EAAI,IACtBwE,MAAK,CAAGxE,WAAW,CAAGgzB,QADA,CAExB6hC,cAAc,CAAGtnD,OAFO,CAGxB2/C,WAAW,GAAKzC,IAAI,CAACG,IAHG,CAI3ByJ,UAAU,CAAC7vD,KAAD,CAJiB,CAKjB0oD,WAAW,GAAKzC,IAAI,CAACI,wBAArB,EAAiDsC,4BALhC,EAM3BA,4BAA4B,CAAC/sD,MAA7B,CAAoCoE,KAApC,CAN2B,CAOvB2oD,4BAA4B,CAAC2H,qBAA7B,EAPuB,GAQ1B3H,4BAA4B,MARF,CAS1BD,WAAW,CAAGzC,IAAI,CAACE,OATO,EAW3BkK,cAAc,GAXa,EAYjB3H,WAAW,GAAKzC,IAAI,CAACsK,wBAArB,EAAiD3H,4BAZhC,EAa3BA,4BAA4B,CAAChtD,MAA7B,CAAoCoE,KAApC,CAb2B,CAcvB4oD,4BAA4B,CAAC0H,qBAA7B,EAduB,GAe1B1H,4BAA4B,MAfF,CAgB1BF,WAAW,CAAGzC,IAAI,CAACE,OAhBO,EAkB3BkK,cAAc,GAlBa,EAmBjB3H,WAAW,GAAKzC,IAAI,CAACK,WAArB,EAAoCuC,sBAnBnB,CAoB3BA,sBAAsB,CAACjtD,MAAvB,CAA8BoE,KAA9B,CApB2B,CAqBjB0oD,WAAW,GAAKzC,IAAI,CAACQ,YAArB,EAAqCqD,UArBpB,GAsBxBoG,iBAAiB,EAtBO,CAuBxBG,cAAc,GAvBU,EAyBxBA,cAzBwB,GA0BtB,KAAKrH,MAAL,GAAgBtC,KAAK,CAACC,MAAvB,EAAmC,KAAKqC,MAAL,GAAgBtC,KAAK,CAACI,YA1BlC,CA2B1BmH,MAAM,EA3BoB,CA4Bf,KAAKjF,MAAL,GAAgBtC,KAAK,CAACG,GAAvB,EAAgC,KAAKmC,MAAL,GAAgBtC,KAAK,CAACM,SA5BtC,CA6B1BpkD,SAAS,EA7BiB,EA8Bf,KAAKomD,MAAL,GAAgBtC,KAAK,CAACE,IAAvB,EAAiC,KAAKoC,MAAL,GAAgBtC,KAAK,CAACK,UAAvD,EAAuE,KAAKiC,MAAL,GAAgBtC,KAAK,CAACO,MA9B7E,GA+B1B2H,OAAO,EA/BmB,CAiCvB,KAAK5F,MAAL,GAAgBtC,KAAK,CAACR,IAjCC,EAkCtBwC,WAAW,GAAKzC,IAAI,CAACK,WAArB,EAAoCuC,sBAApC,EACFA,sBAAsB,CAAC2H,iBAnCC,CAsCvB,KAAKxH,MAAL,GAAgBtC,KAAK,CAACO,MAtCC,GAuC1B,KAAK+B,MAAL,CAActC,KAAK,CAACR,IAvCM,GAyCxBsC,wBAzCwB,CA0C3BA,wBAAwB,CAAC5sD,MAAzB,EA1C2B,CA8C3B,KAAKsD,YAAL,CAAkB8D,MAAlB,CAA0B,KAAK9D,YAAL,CAAkB+wB,MAA5C,CAED,CA96BsE,CAm7BvE,KAAKwgC,QAAL,CAAgB,IAAM,CACrB/H,WAAW,CAAGzC,IAAI,CAACG,IACnB,CAr7BsE,CA07BvE,KAAKsK,QAAL,CAAgB,IAAM,CACrBhI,WAAW,CAAGzC,IAAI,CAACE,OACnB,CA57BsE,CAm8BvE,KAAKwK,aAAL,CAAqB,IACZjI,WAAW,GAAKzC,IAAI,CAACG,IAp8ByC,CA68BvE,KAAKwK,oCAAL,CAA4Cx0D,IAAI,EAAI,CACnDmsD,uBAAuB,CAAGnsD,IAC1B,CA/8BsE,CAo9BvE,KAAKy0D,uBAAL,CAA+B,IAAM,CAC/BrI,wBAD+B,GAEnCA,wBAAwB,CAAG,GAAIsI,kCAAJ,CAAsC,KAAK5xD,YAA3C,CAFQ,CAGpC,CAv9BsE,CA49BvE,KAAK6xD,wBAAL,CAAgC,IAAM,CACjCvI,wBADiC,GAEpCA,wBAAwB,CAACzrD,OAAzB,EAFoC,CAGpCyrD,wBAAwB,OAHY,CAKrC,CAj+BsE,CAs+BvE,KAAKwI,0BAAL,CAAkC,MAC7BxI,wBAv+BkE,CAg/BvE,KAAK/2B,SAAL,CAAiB,IAAM,CACpB,GAAM+G,SAAQ,CAAGwxB,SAAS,CAACvB,eAAD,CAA1B,CACF,KAAKvpD,YAAL,CAAkB8pB,IAAlB,CAAyBwP,QAAQ,CAACutB,SAFZ,CAGtB,KAAK7mD,YAAL,CAAkB+pB,GAAlB,CAAwBuP,QAAQ,CAACwtB,QAHX,CAItB,KAAK9mD,YAAL,CAAkBrF,QAAlB,CAA2BwE,GAA3B,CAAgCm6B,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CAAhC,CAAyD5D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CAAzD,CACI5D,QAAQ,CAAC4D,WAAT,CAAqB,CAArB,CADJ,CAJsB,CAMtB,KAAKl9B,YAAL,CAAkB+wB,MAAlB,CAAyB5xB,GAAzB,CAA8Bm6B,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CAA9B,CACI3D,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CADJ,CACgC3D,QAAQ,CAAC2D,cAAT,CAAwB,CAAxB,CADhC,CANsB,CAQtB,KAAKj9B,YAAL,CAAkBmuD,EAAlB,CAAqBhvD,GAArB,CAA0Bm6B,QAAQ,CAAC6D,QAAT,CAAkB,CAAlB,CAA1B,CAAiD7D,QAAQ,CAAC6D,QAAT,CAAkB,CAAlB,CAAjD,CACI7D,QAAQ,CAAC6D,QAAT,CAAkB,CAAlB,CADJ,CARsB,CAUtB,KAAKn9B,YAAL,CAAkBo4B,sBAAlB,EAVsB,CAWtB,KAAKnF,sBAAL,EACA,CA5/BsE,CAmgCvE,KAAKiG,wBAAL,CAAgC64B,WAAW,EAAI,CAC1CA,WAAW,CAAClL,SAD8B,GAE7C,KAAK7mD,YAAL,CAAkB8pB,IAAlB,CAAyBioC,WAAW,CAAClL,SAFQ,EAG1CkL,WAAW,CAACjL,QAH8B,GAI7C,KAAK9mD,YAAL,CAAkB+pB,GAAlB,CAAwBgoC,WAAW,CAACjL,QAJS,EAK1CiL,WAAW,CAAC70B,WAL8B,EAM7C,KAAKl9B,YAAL,CAAkBrF,QAAlB,CAA2BwE,GAA3B,CAAgC4yD,WAAW,CAAC70B,WAAZ,CAAwB,CAAxB,CAAhC,CACE60B,WAAW,CAAC70B,WAAZ,CAAwB,CAAxB,CADF,CAC8B60B,WAAW,CAAC70B,WAAZ,CAAwB,CAAxB,CAD9B,CAN6C,CAQ1C60B,WAAW,CAAC90B,cAR8B,EAS7C,KAAKj9B,YAAL,CAAkB+wB,MAAlB,CAAyB5xB,GAAzB,CAA8B4yD,WAAW,CAAC90B,cAAZ,CAA2B,CAA3B,CAA9B,CACE80B,WAAW,CAAC90B,cAAZ,CAA2B,CAA3B,CADF,CACiC80B,WAAW,CAAC90B,cAAZ,CAA2B,CAA3B,CADjC,CAT6C,CAW1C80B,WAAW,CAAC50B,QAX8B,EAY7C,KAAKn9B,YAAL,CAAkBmuD,EAAlB,CAAqBhvD,GAArB,CAA0B4yD,WAAW,CAAC50B,QAAZ,CAAqB,CAArB,CAA1B,CAAmD40B,WAAW,CAAC50B,QAAZ,CAAqB,CAArB,CAAnD,CACE40B,WAAW,CAAC50B,QAAZ,CAAqB,CAArB,CADF,CAZ6C,CAc9C,KAAKn9B,YAAL,CAAkBo4B,sBAAlB,EAd8C,CAe9C,KAAKnF,sBAAL,EACA,CAnhCsE,CAiiCvE,KAAK8C,8BAAL,CAAsC,CAACJ,OAAD,CAAUC,OAAV,CAAmBC,OAAnB,CAA4B3wB,MAA5B,CAAoC8sD,UAApC,CAAgDC,aAAhD,GAAkE,IACnGC,KAAI,CAAG,KAAKlyD,YAAL,CAAkBrF,QAAlB,CAA2BzE,CAA3B,CAA6B,KAAK8J,YAAL,CAAkB+wB,MAAlB,CAAyB76B,CADsC,CAEnGi8D,IAAI,CAAG,KAAKnyD,YAAL,CAAkBrF,QAAlB,CAA2BxE,CAA3B,CAA6B,KAAK6J,YAAL,CAAkB+wB,MAAlB,CAAyB56B,CAFsC,CAGnGi8D,IAAI,CAAG,KAAKpyD,YAAL,CAAkBrF,QAAlB,CAA2BiF,CAA3B,CAA6B,KAAKI,YAAL,CAAkB+wB,MAAlB,CAAyBnxB,CAHsC,CAIjGkuD,IAAI,CAAG,EAAIptD,IAAI,CAACmZ,IAAL,CAAUq4C,IAAI,CAACA,IAAL,CAAUC,IAAI,CAACA,IAAf,CAAoBC,IAAI,CAACA,IAAnC,CAJsF,CAKvGF,IALuG,EAKzFpE,IALyF,CAMvGqE,IANuG,EAMzFrE,IANyF,CAOvGsE,IAPuG,EAOzFtE,IAPyF,CAQvG,sCARuG,GAWjGuE,aAAY,CAAGntD,MAAM,CAACxE,IAAI,CAAC4xD,GAAL,CAASN,UAAU,CAACtxD,IAAI,CAAC2uD,EAAhB,CAAmB,GAA5B,CAX2E,CAYjGkD,gBAAgB,CAAG,CAAE58B,OAAO,CAAGu8B,IAAI,CAACG,YAAjB,CAAgCz8B,OAAO,CAAGu8B,IAAI,CAACE,YAA/C,CACLx8B,OAAO,CAAGu8B,IAAI,CAACC,YADV,CAZ8E,CAenGG,cAAc,CAAG,CAfkF,CAgBjGC,kBAAkB,CAAG,GAhB4E,CAUvG,8DASCD,cAnBsG,CAiBnGP,aAAa,CAAGQ,kBAAkB,CAACJ,YAjBgE,CAmBrF,CAAC,EAAMI,kBAAP,EAA2BJ,YAnB0D,CAuBrFA,YAAY,CAAGJ,aAvBsE,CAyBvG,GAAMF,YAAW,CAAG,GAAIv/D,SAAxB,CAQA,MAPAu/D,YAAW,CAAClL,SAAZ,CAAwB2L,cAOxB,CANAT,WAAW,CAACjL,QAAZ,CAbsBuL,YAAY,CAACJ,aAmBnC,CALAF,WAAW,CAAC70B,WAAZ,CAA0Bq1B,gBAK1B,CAJAR,WAAW,CAAC90B,cAAZ,CApB4B,CAACtH,OAAD,CAAUC,OAAV,CAAmBC,OAAnB,CAwB5B,CAHAk8B,WAAW,CAAC50B,QAAZ,CAAuB,CAAC,KAAKn9B,YAAL,CAAkBmuD,EAAlB,CAAqBj4D,CAAtB,CAAyB,KAAK8J,YAAL,CAAkBmuD,EAAlB,CAAqBh4D,CAA9C,CACC,KAAK6J,YAAL,CAAkBmuD,EAAlB,CAAqBvuD,CADtB,CAGvB,CAAOmyD,WACP,CAnkCsE,CA0kCvE,KAAK97B,kBAAL,CAA0B,IAAM,CAC/B,GAAMy8B,gBAAe,CAAG,GAAIlgE,SAA5B,CAYA,MAXAkgE,gBAAe,CAAC7L,SAAhB,CAA4B,KAAK7mD,YAAL,CAAkB8pB,IAW9C,CAVA4oC,eAAe,CAAC5L,QAAhB,CAA2B,KAAK9mD,YAAL,CAAkB+pB,GAU7C,CATA2oC,eAAe,CAACx1B,WAAhB,CAA4B,CAA5B,EAAiC,KAAKl9B,YAAL,CAAkBrF,QAAlB,CAA2BzE,CAS5D,CARAw8D,eAAe,CAACx1B,WAAhB,CAA4B,CAA5B,EAAiC,KAAKl9B,YAAL,CAAkBrF,QAAlB,CAA2BxE,CAQ5D,CAPAu8D,eAAe,CAACx1B,WAAhB,CAA4B,CAA5B,EAAiC,KAAKl9B,YAAL,CAAkBrF,QAAlB,CAA2BiF,CAO5D,CANA8yD,eAAe,CAACz1B,cAAhB,CAA+B,CAA/B,EAAoC,KAAKj9B,YAAL,CAAkB+wB,MAAlB,CAAyB76B,CAM7D,CALAw8D,eAAe,CAACz1B,cAAhB,CAA+B,CAA/B,EAAoC,KAAKj9B,YAAL,CAAkB+wB,MAAlB,CAAyB56B,CAK7D,CAJAu8D,eAAe,CAACz1B,cAAhB,CAA+B,CAA/B,EAAoC,KAAKj9B,YAAL,CAAkB+wB,MAAlB,CAAyBnxB,CAI7D,CAHA8yD,eAAe,CAACv1B,QAAhB,CAAyB,CAAzB,EAA8B,KAAKn9B,YAAL,CAAkBmuD,EAAlB,CAAqBj4D,CAGnD,CAFAw8D,eAAe,CAACv1B,QAAhB,CAAyB,CAAzB,EAA8B,KAAKn9B,YAAL,CAAkBmuD,EAAlB,CAAqBh4D,CAEnD,CADAu8D,eAAe,CAACv1B,QAAhB,CAAyB,CAAzB,EAA8B,KAAKn9B,YAAL,CAAkBmuD,EAAlB,CAAqBvuD,CACnD,CAAO8yD,eACP,CAxlCsE,CA0lCvE,KAAKC,qBAAL,CAA6B,IACrBz1B,WA3lC+D,CA8lCvE,KAAK01B,wBAAL,CAAgC,IACxB31B,cA/lC+D,CA6mCvE,KAAK/G,gBAAL,CAAwB,CAACF,gBAAD,CAAmBF,cAAnB,CAAmC58B,UAAnC,GAAkD,CACpEwwD,4BAA4B,MADwC,GAEtED,4BAA4B,CAAG,GAAI/2D,uBAAJ,CAA2BsjC,gBAA3B,CAA6CF,cAA7C,CAC3B,IAD2B,CACrB58B,UADqB,CAFuC,CAIzE,CAjnCsE,CA+nCvE,KAAKukC,sBAAL,CAA8B,CAACwwB,IAAD,CAAO7qD,KAAP,CAAclL,QAAd,GAA2B,CACnDuxD,4BAA4B,MADuB,GAErDC,4BAA4B,CAAG,GAAImJ,uBAAJ,CAA2B5E,IAA3B,CAAiC7qD,KAAjC,CAC7B,IAD6B,CACvBlL,QADuB,CAFsB,CAIxD,CAnoCsE,CA0oCvE,KAAKi+B,sBAAL,CAA8B,IAAM,CAC9BszB,4BAD8B,GAEhCD,WAAW,CAAGzC,IAAI,CAACI,wBAFa,EAG9BuC,4BAH8B,GAIhCF,WAAW,CAAGzC,IAAI,CAACsK,wBAJa,CAKnC,CA/oCsE,CAopCvE,KAAKyB,qBAAL,CAA6B,IAAM,CAClCtJ,WAAW,CAAGzC,IAAI,CAACE,OACnB,CAtpCsE,CA4pCvE,KAAK8L,oBAAL,CAA4B,IAAM,CACjCvJ,WAAW,CAAGzC,IAAI,CAACE,OADc,CAEjCwC,4BAA4B,OAFK,CAGjCC,4BAA4B,OAC5B,CAhqCsE,CAqqCvE,KAAKsJ,qBAAL,CAA6B,IACpBxJ,WAAW,GAAKzC,IAAI,CAACI,wBAArB,EACJqC,WAAW,GAAKzC,IAAI,CAACsK,wBAvqC6C,CAqrCvE,KAAK4B,UAAL,CAAkB,CAACC,iBAAD,CAAoBC,YAApB,CAAkCC,mBAAlC,GAA0D,CAC3EzJ,sBAAsB,CAAG,GAAI/2D,iBAAJ,CAAqBsgE,iBAArB,CAAwCC,YAAxC,CAAsDC,mBAAtD,CAA2E,IAA3E,CACzB,CAvrCsE,CA4rCvE,KAAKC,gBAAL,CAAwB,IAAM,CAC7B7J,WAAW,CAAGzC,IAAI,CAACK,WACnB,CA9rCsE,CAmsCvE,KAAKkM,cAAL,CAAsB,IAAM,CAC3B9J,WAAW,CAAGzC,IAAI,CAACE,OADQ,CAE3B0C,sBAAsB,OACtB,CAtsCsE,CA2sCvE,KAAK4J,gBAAL,CAAwB,IAAM,CACzB5J,sBADyB,GAE5BA,sBAAsB,CAAC6J,aAAvB,GAF4B,CAG7B,CA9sCsE,CAqtCvE,KAAKC,YAAL,CAAoB,IACXjK,WAAW,GAAKzC,IAAI,CAACK,WAttCyC,CAkuCtE,KAAKsM,eAAL,CAAuB,CAAC3hC,OAAD,CAAU4hC,kBAAV,CAA8BC,uBAA9B,GAA0D,CAC3E7J,aAAa,MAD8D,GAE7EA,aAAa,CAAG,GAAIp3D,UAAJ,CAAco/B,OAAd,CAAuB,KAAKxxB,KAA5B,CAAmCozD,kBAAnC,CAAuDC,uBAAvD,CAAgF,KAAK1kC,QAArF,CAF6D,CAGhF,CAruCqE,CA0uCtE,KAAK2kC,gBAAL,CAAwB,IAAM,CAC5B9J,aAAa,CAACtqD,OAAd,EAD4B,CAE5BsqD,aAAa,OACd,CA7uCqE,CAovCtE,KAAK+J,aAAL,CAAqB,IACZC,WAAW,GAAKhN,IAAI,CAACQ,YArvCwC,CA2vCtE,KAAKyM,iBAAL,CAAyB,KACvBxK,WAAW,CAAGzC,IAAI,CAACQ,YADI,CAElBqD,UAFkB,GAGrBA,UAAU,CAAG,GAAIqJ,iBAHI,EAIvBrJ,UAAU,CAAC1xB,wBAAX,CAAoC,KAAKl5B,YAAzC,CACE8qD,SAAS,CAACvB,eAAD,CADX,CAJuB,CAMhBqB,UANgB,CA3vC6C,CAuwCtE,KAAKsJ,kBAAL,CAA0B,IAAM,CAC9B1K,WAAW,CAAGzC,IAAI,CAACE,OADW,CAE9B,KAAKjnD,YAAL,CAAkBkxD,IAAlB,CAAyB,CAFK,CAG9B,KAAKlxD,YAAL,CAAkBo4B,sBAAlB,EACD,CA3wCqE,CA6wCvE,KAAKn4B,MAAL,EAEA,C,CAEKvN,sBAAsB,CAAG,SAASsjC,gBAAT,CAA2BF,cAA3B,CAA2Cq+B,cAA3C,CAA2Dj7D,UAA3D,CAAuE,IAC/Fk7D,oBAAmB,CAAGp+B,gBAAgB,CAACkH,WADwD,CAE/Fm3B,sBAAsB,CAAGr+B,gBAAgB,CAACiH,cAFqD,CAG/Fq3B,UAAU,CAAGt+B,gBAAgB,CAACmH,QAHiE,CAI/Fo3B,iBAAiB,CAAGz+B,cAAc,CAACoH,WAJ4D,CAK/Fs3B,oBAAoB,CAAG1+B,cAAc,CAACmH,cALyD,CAM/Fw3B,QAAQ,CAAG3+B,cAAc,CAACqH,QANqE,CAO/Fu3B,YAAY,CAAGP,cAPgF,CAQjGj8D,QAAQ,CAAGgB,UARsF,CASjGnB,WAAW,CAAG,CATmF,CAYjG48D,SAAS,GAZwF,CAarGD,YAAY,CAAC5qC,IAAb,CAAoBppB,IAAI,CAAC3K,GAAL,CAASigC,gBAAgB,CAAC6wB,SAA1B,CAAqC/wB,cAAc,CAAC+wB,SAApD,CAbiF,CAcrG6N,YAAY,CAAC3qC,GAAb,CAAmBrpB,IAAI,CAAC7K,GAAL,CAASmgC,gBAAgB,CAAC8wB,QAA1B,CAAoChxB,cAAc,CAACgxB,QAAnD,CAdkF,CAerG4N,YAAY,CAAC10D,YAAb,CAA0BmuD,EAA1B,CAA6BhvD,GAA7B,CAAkC22B,cAAc,CAACqH,QAAf,CAAwB,CAAxB,CAAlC,CAA+DrH,cAAc,CAACqH,QAAf,CAAwB,CAAxB,CAA/D,CACKrH,cAAc,CAACqH,QAAf,CAAwB,CAAxB,CADL,CAfqG,CAkBpG,KAAKlkC,WAAL,CAAmB27D,WAAW,EAAI,CAChC18D,QAAQ,CAAG08D,WACZ,CApBmG,IAsB/FxE,WAAU,CAAGtvD,KAAK,EAAI,CAC3B,GAAIC,WAAU,CAAGhJ,WAAW,CAAG+I,KAA/B,CACIC,UAAU,CAAG7I,QAFU,GAG1B6I,UAAU,CAAG7I,QAHa,EAI3BH,WAAW,CAAGgJ,UACd,CA3BoG,CA6B/F8zD,oBAAoB,CAAG,IAAM,IAC5Bn5D,MAAK,CAAG3D,WAAW,CAAGG,QADM,CAE5BglC,WAAW,CAAG,CAACk3B,mBAAmB,CAAC,CAAD,CAAnB,EAA0B,EAAM14D,KAAhC,EAAyC64D,iBAAiB,CAAC,CAAD,CAAjB,CAAuB74D,KAAjE,CACD04D,mBAAmB,CAAC,CAAD,CAAnB,EAA0B,EAAM14D,KAAhC,EAAyC64D,iBAAiB,CAAC,CAAD,CAAjB,CAAuB74D,KAD/D,CAED04D,mBAAmB,CAAC,CAAD,CAAnB,EAA0B,EAAM14D,KAAhC,EAAyC64D,iBAAiB,CAAC,CAAD,CAAjB,CAAuB74D,KAF/D,CAFc,CAK5BuhC,cAAc,CAAG,CAACo3B,sBAAsB,CAAC,CAAD,CAAtB,EAA6B,EAAM34D,KAAnC,EAA4C84D,oBAAoB,CAAC,CAAD,CAApB,CAA0B94D,KAAvE,CACD24D,sBAAsB,CAAC,CAAD,CAAtB,EAA6B,EAAM34D,KAAnC,EAA4C84D,oBAAoB,CAAC,CAAD,CAApB,CAA0B94D,KADrE,CAED24D,sBAAsB,CAAC,CAAD,CAAtB,EAA6B,EAAM34D,KAAnC,EAA4C84D,oBAAoB,CAAC,CAAD,CAApB,CAA0B94D,KAFrE,CALW,CAQ1ByhC,QAAQ,CAAG,CAACm3B,UAAU,CAAC,CAAD,CAAV,EAAiB,EAAM54D,KAAvB,EAAgC+4D,QAAQ,CAAC,CAAD,CAAR,CAAc/4D,KAA/C,CACf44D,UAAU,CAAC,CAAD,CAAV,EAAiB,EAAM54D,KAAvB,EAAgC+4D,QAAQ,CAAC,CAAD,CAAR,CAAc/4D,KAD/B,CAEf44D,UAAU,CAAC,CAAD,CAAV,EAAiB,EAAM54D,KAAvB,EAAgC+4D,QAAQ,CAAC,CAAD,CAAR,CAAc/4D,KAF/B,CARe,CAWlCg5D,YAAY,CAAC10D,YAAb,CAA0BrF,QAA1B,CAAmCwE,GAAnC,CAAwC+9B,WAAW,CAAC,CAAD,CAAnD,CAAwDA,WAAW,CAAC,CAAD,CAAnE,CAAwEA,WAAW,CAAC,CAAD,CAAnF,CAXkC,CAYlCw3B,YAAY,CAAC10D,YAAb,CAA0B+wB,MAA1B,CAAiC5xB,GAAjC,CAAsC89B,cAAc,CAAC,CAAD,CAApD,CAAyDA,cAAc,CAAC,CAAD,CAAvE,CAA4EA,cAAc,CAAC,CAAD,CAA1F,CACA,CA1CoG,CA4CrG,KAAKvgC,MAAL,CAAcoE,KAAK,EAAI,CAEjB,UAAK+I,OAFY,GAItBumD,UAAU,CAACtvD,KAAD,CAJY,CAMtB+zD,oBAAoB,EANE,CAQlB98D,WAAW,EAAIG,QARG,GASrBy8D,SAAS,GATY,EAYtB,CAxDoG,CA0DrG,KAAKvD,qBAAL,CAA6B,IACrBuD,SAGR,C,CAEK9B,sBAAsB,CAAG,SAASiC,MAAT,CAAiBC,OAAjB,CAA0BZ,cAA1B,CAA0Cj7D,UAA1C,CAAsD,IAI/EhB,SAAQ,CAAGgB,UAJoE,CAK/EnB,WAAW,CAAG,CALiE,CAQ/E48D,SAAS,GARsE,CAUnF,KAAK17D,WAAL,CAAmB27D,WAAW,EAAI,CAChC18D,QAAQ,CAAG08D,WACZ,CAZkF,CAcnF,GAAMC,qBAAoB,CAAG/zD,KAAK,EAAI,IAC9Bk0D,aAAY,CAAGj9D,WADe,CAEhCgJ,UAAU,CAAGhJ,WAAW,CAAG+I,KAFK,CAGhCC,UAAU,CAAG7I,QAHmB,GAIlC6I,UAAU,CAAG7I,QAJqB,EAKpCH,WAAW,CAAGgJ,UALsB,IAM9Bk0D,YAAW,CAAGl9D,WAAW,CAAGi9D,YANE,CAO9Bt5D,KAAK,CAAGu5D,WAAW,CAAG/8D,QAPQ,CAXjBi8D,cAoBnB,CAAaz2B,sBAAb,CAtBWo3B,MAsBX,CADcp5D,KAAK,CApBPq5D,OAqBZ,CACD,CAVD,CAYA,KAAKr4D,MAAL,CAAcoE,KAAK,EAAI,CAEhB,UAAK+I,OAFW,GAIrBgrD,oBAAoB,CAAC/zD,KAAD,CAJC,CAMjB/I,WAAW,EAAIG,QANE,GAOnBy8D,SAAS,GAPU,EAUtB,CApCkF,CAsCnF,KAAKvD,qBAAL,CAA6B,IACpBuD,SAEV,C,CAEKhiE,SAAS,CAAG,SAAUo/B,OAAV,CAAmBmjC,WAAnB,CAAgCvB,kBAAhC,CAAoDC,uBAApD,CAA6E/8B,UAA7E,CAAyF,IACnGt2B,MAAK,CAAGwxB,OAD2F,CAGpG7C,QAAQ,CAAG2H,UAHyF,CAIpG/Z,gBAAgB,CAAG62C,kBAJiF,CAKpGwB,qBAAqB,CAAGvB,uBAL4E,CAMpG/pD,OAAO,GAN6F,CAOpG4e,SAAS,CAAG,GAAIz1B,MAAK,CAACoiE,SAP8E,CAQ1G3sC,SAAS,CAACxK,MAAV,CAAiB6M,IAAjB,CAAsBnC,SAAtB,CAAkC,EARwE,CAS1GF,SAAS,CAACxK,MAAV,CAAiByJ,MAAjB,CAAwBiB,SAAxB,CAAoC,EATsE,IAUnG0sC,MAAK,CAAG,GAAIriE,MAAK,CAACiD,OAViF,CAWrGq/D,QAAQ,GAX6F,CAYrGC,eAAe,CAAG,GAAI/hC,KAZ+E,CAarGgiC,gBAAgB,GAbqF,CAcrGC,QAAQ,CAAG,CAd0F,CAerGC,aAAa,GAfwF,CAgBrGC,YAAY,CAAG,CAAEC,UAAU,OAAZ,CAAyB1/D,CAAC,CAAE,CAAC,CAA7B,CAAgCC,CAAC,CAAE,CAAC,CAApC,CAhBsF,CAkB1G,KAAK8J,MAAL,CAAc,IAAM,CACnBA,MAAM,GACN,CApByG,CAsB1G,KAAKR,OAAL,CAAe,IAAM,CACpBQ,MAAM,GACN,CAxByG,CA0B1G,GAAM41D,oBAAmB,CAAG,CAACD,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,GAAsB,CAE/C,GADAy/D,UAAU,CAACtK,wBAAX,CAAoCp1D,CAApC,CAAuCC,CAAvC,CAA0Ck/D,KAA1C,CACA,CA1BgBH,WA0BZ,GAAc30D,KAAlB,CAAyB,CACvB,GAAMu1D,aAAY,CAAGv1D,KAAK,CAAC80B,eAAN,EAArB,CACAnG,QAAQ,CAACruB,MAAT,CAAgBi1D,YAAhB,CAA8BF,UAAU,CAAC51D,YAAzC,CACD,CACDyoB,SAAS,CAACstC,aAAV,CAAyBV,KAAzB,CAAgCO,UAAU,CAAC51D,YAA3C,CAN+C,CAO/C,GAAIqqC,QAAO,CAAG9pC,KAAK,CAAC09B,yBAAN,EAAd,CACA;AAEF,MADEy3B,cAAa,CAACl/D,MAAd,CAAuB,CACzB,CAAOiyB,SAAS,CAACutC,gBAAV,CAA4B3rB,OAA5B,IAA2CqrB,aAA3C,CACP,CAXD,CAaA,KAAKhJ,IAAL,CAAY,CAACkJ,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,GAAsB,CAC7B0T,OAAO,EAAIqlB,QAAX,EAAuB3uB,KAAvB,EAAgCq1D,UAAhC,EAA8C94C,gBADjB,GAEhC+4C,mBAAmB,CAACD,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,CAFa,CAGhC2mB,gBAAgB,CAAC44C,aAAD,CAAgBx/D,CAAhB,CAAmBC,CAAnB,CAHgB,CAKhC,CA5CwG,CA8CzG,GAAI8/D,QAAO,CAAG,CAACL,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,GAAsB,CAClC,GAAI0T,OAAO,EAAIqlB,QAAX,EAAuB3uB,KAAvB,EAAgCq1D,UAAhC,EAA8CT,qBAAlD,CAAyE,CAGvE,GAFAU,mBAAmB,CAACD,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,CAEnB,CADAo/D,eAAe,CAAC55B,OAAhB,CAAwBnI,IAAI,CAACC,GAAL,EAAxB,CACA,CAA6B,CAAzB,GAAAiiC,aAAa,CAACl/D,MAAlB,CAAgC,CAC9B;AACA,GAAIg/D,gBAAJ,CACE,OACFA,gBAAgB,GACjB,CALD,IAMEA,iBAAgB,GANlB,CAQAL,qBAAqB,CAACO,aAAD,CAAgBx/D,CAAhB,CAAmBC,CAAnB,CACtB,CACF,CAdD,CAgBD,KAAKq2D,IAAL,CAAY,CAACoJ,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,GAAsB,CAC3B0T,OAAO,EAAIqlB,QAAX,EAAuB3uB,KAAvB,EAAgCq1D,UAAhC,EAA8CT,qBADnB,GAEzB50D,KAAK,CAAChB,cAFmB,CAG3B02D,OAAO,CAACL,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,CAHoB,EAK3Bw/D,YAAY,CAACC,UAAb,CAA0BA,UALC,CAM3BD,YAAY,CAACz/D,CAAb,CAAiBA,CANU,CAO3By/D,YAAY,CAACx/D,CAAb,CAAiBA,CAPU,CAQvB,CAACm/D,QARsB,GASzBG,QAAQ,CAAGF,eAAe,CAAG/hC,IAAI,CAACC,GAAL,GAAa8hC,eAAe,CAAClF,OAAhB,EAAhB,CAA4C,GAT7C,CAUT,GAAZ,EAAAoF,QAVqB,CAWvBQ,OAAO,CAACL,UAAD,CAAa1/D,CAAb,CAAgBC,CAAhB,CAXgB,EAavBm/D,QAAQ,GAbe,CAcvBY,UAAU,CAACC,SAAS,CAACR,YAAD,CAAV,CAA0BF,QAA1B,CAda,IAmBhC,CAjFwG,CAmFzG,GAAIU,UAAS,CAAIR,YAAD,EACP,UAAW,CAChBL,QAAQ,GADQ,CAEhBW,OAAO,CAACN,YAAY,CAACC,UAAd,CAA0BD,YAAY,CAACz/D,CAAvC,CAA0Cy/D,YAAY,CAACx/D,CAAvD,CACR,CAEJ,C,CAEKvD,gBAAgB,CAAG,SAAUsgE,iBAAV,CAA6BC,YAA7B,CAA2CC,mBAA3C,CAAgEe,cAAhE,CAAgF,IAClGiC,WAAU,CAAG,GAAIpjE,MAAK,CAAC4F,OAD2E,CAGlG87D,YAAY,CAAGP,cAHmF,CAOxG,KAAK7C,iBAAL,CAAyB8B,mBAP+E,CAQvG,KAAKI,aAAL,GARuG,IASjG38D,EAAC,CAAG,GAAI7D,MAAK,CAAC4F,OATmF,CAUjG7B,CAAC,CAAG,GAAI/D,MAAK,CAAC4F,OAVmF,CAYlGy9D,sBAAsB,CAAGC,eAAe,EAAI,IAC3CpH,aAAY,CAAGxuD,IAAI,CAACmZ,IAAL,CAAUy8C,eAAe,CAAC,CAAD,CAAf,CAAmBA,eAAe,CAAC,CAAD,CAAlC,CAC9BA,eAAe,CAAC,CAAD,CAAf,CAAmBA,eAAe,CAAC,CAAD,CADd,CAD4B,CAG3C5rC,KAAK,CAAkC,CAA/B,CAAAhqB,IAAI,CAAC+3C,GAAL,CAAS6d,eAAe,CAAC,CAAD,CAAxB,CAHmC,CAI3CnqC,MAAM,CAAkC,CAA/B,CAAAzrB,IAAI,CAAC+3C,GAAL,CAAS6d,eAAe,CAAC,CAAD,CAAxB,CAJkC,CAK3CpxD,MAAM,CAAG,KAAQwlB,KAAK,CAAGyB,MAAhB,CALkC,CAM3C2gC,EAAE,CAAG,CAACwJ,eAAe,CAAC,CAAD,CAAhB,CAAoBpH,YANkB,CAO3CnC,EAAE,CAAGuJ,eAAe,CAAC,CAAD,CAAf,CAAmBpH,YAPmB,CAQ7CxvC,CAAC,CAAGotC,EAAE,CAAEwJ,eAAe,CAAC,CAAD,CAAnB,CAAwBvJ,EAAE,CAAE,CAACuJ,eAAe,CAAC,CAAD,CARH,CAU7C52C,CAAC,CAAGxa,MAVyC,CAYhDwa,CAAC,CAAGxa,MAZ4C,CAgB5Cwa,CAAC,CAAG,CAACxa,MAhBuC,GAkB/Cwa,CAAC,CAAG,CAACxa,MAlB0C,EAsBjD,GAAMiqD,IAAG,CAACzuD,IAAI,CAAC0uD,IAAL,CAAU1vC,CAAC,CAACxa,MAAZ,EAAoB,GAAIxE,IAAI,CAAC2uD,EAAvC,CACA,8BACA+G,UAAU,CAACvwD,IAAX,CAAgB6uD,YAAY,CAAC10D,YAAb,CAA0BrF,QAA1C,EAAoDyvB,GAApD,CACIsqC,YAAY,CAAC10D,YAAb,CAA0B+wB,MAD9B,EACsChuB,SADtC,EAxBiD,CA0BjDlM,CAAC,CAACgP,IAAF,CAAO6uD,YAAY,CAAC10D,YAAb,CAA0BmuD,EAAjC,EAAqCprD,SAArC,EA1BiD,CA2B/ChM,CAAC,CAACwmC,YAAF,CAAe1mC,CAAf,CAAkBu/D,UAAlB,EAA8BrzD,SAA9B,GAA0ClE,cAA1C,CAAyDiuD,EAAzD,CA3B+C,CA4B/Cj2D,CAAC,CAACgI,cAAF,CAAiBkuD,EAAjB,CA5B+C,CA6B/Cl2D,CAAC,CAACuD,GAAF,CAAMrD,CAAN,EAAS8H,cAAT,CAAwB6B,IAAI,CAACiuD,GAAL,CAASQ,GAAT,CAAxB,CA7B+C,CA8B/CiH,UAAU,CAACv3D,cAAX,CAA0B6B,IAAI,CAACmuD,GAAL,CAASM,GAAT,CAA1B,EAAyC/0D,GAAzC,CAA6CvD,CAA7C,CACF,CA3CuG,CA6CxG,KAAK6F,MAAL,CAAcoE,KAAK,EAAI,CAEjB,UAAK+I,OAFY,GAIlB,KAAK2pD,aAJa,GAKrB6C,sBAAsB,CA5CAnD,iBA4CA,CALD,CAMrB,KAAKM,aAAL,GANqB,EAQtBkB,YAAY,CAACh3B,sBAAb,CAAoC04B,UAApC,CAnDa,CAACjD,YAmDkC,CAAQryD,KAAR,CAAc,GAA9D,CARsB,CAUtB,CAED,C,CAKDy1D,qBAAqB,CAAG,gCAAY,CAEnC,KAAKh1D,IAAL,CAAY,cAFuB,CAInC,KAAK42B,MAAL,CAAc,CAJqB,CAMnC,KAAKq+B,OAAL,CAAe,GAAIxjE,MAAK,CAACylC,iBANU,CAOnC,KAAK+9B,OAAL,CAAaC,MAAb,CAAoBx2D,MAApB,CAA4B,CAA5B,CAPmC,CAQnC,KAAKu2D,OAAL,CAAar7D,gBAAb,GARmC,CAUnC,KAAKu7D,OAAL,CAAe,GAAI1jE,MAAK,CAACylC,iBAVU,CAWnC,KAAKi+B,OAAL,CAAaD,MAAb,CAAoBx2D,MAApB,CAA4B,CAA5B,CAXmC,CAYnC,KAAKy2D,OAAL,CAAav7D,gBAAb,GAEA,C,CAED9D,MAAM,CAAC+K,MAAP,CAAem0D,qBAAqB,CAACn/D,SAArC,CAAgD,CAE/CsF,MAAM,CAAE,CAAC,IAAM,IAEVi6D,MAFU,CAEHjW,GAFG,CAEEvoB,MAFF,CAEUrO,IAFV,CAEgBC,GAFhB,CAEqBmnC,IAFrB,CAIR0F,QAAQ,CAAG,GAAI5jE,MAAK,CAACiO,OAJb,CAKR41D,OAAO,CAAG,GAAI7jE,MAAK,CAACiO,OALZ,CAOd,MAAO,UAAiBpB,MAAjB,CAA0B,CAEhC,GAAM1F,YAAW,CAAGw8D,KAAK,GAAK92D,MAAM,CAAC82D,KAAjB,EAA0BjW,GAAG,GAAK7gD,MAAM,CAAC6gD,GAAzC,EACXvoB,MAAM,GAAKt4B,MAAM,CAACs4B,MAAP,CAAgB,KAAKA,MADrB,EAC+BrO,IAAI,GAAKjqB,MAAM,CAACiqB,IAD/C,EAEXC,GAAG,GAAKlqB,MAAM,CAACkqB,GAFJ,EAEWmnC,IAAI,GAAKrxD,MAAM,CAACqxD,IAF/C,CAIA,GAAK/2D,WAAL,CAAmB,CAElBw8D,KAAK,CAAG92D,MAAM,CAAC82D,KAFG,CAGlBjW,GAAG,CAAG7gD,MAAM,CAAC6gD,GAHK,CAIlBvoB,MAAM,CAAGt4B,MAAM,CAACs4B,MAAP,CAAgB,KAAKA,MAJZ,CAKlBrO,IAAI,CAAGjqB,MAAM,CAACiqB,IALI,CAMlBC,GAAG,CAAGlqB,MAAM,CAACkqB,GANK,CAOlBmnC,IAAI,CAAGrxD,MAAM,CAACqxD,IAPI,CASlB;AACA;AAVkB,GAgBd4F,KAhBc,CAgBRC,IAhBQ,CAYZC,gBAAgB,CAAGn3D,MAAM,CAACm3D,gBAAP,CAAwBt9D,KAAxB,EAZP,CAaZu9D,MAAM,CAAG,KAAQ,CAbL,CAcZC,kBAAkB,CAAGD,MAAM,CAAGntC,IAAT,CAAgB6sC,KAdzB,CAeZQ,IAAI,CAAGrtC,IAAI,CAAGppB,IAAI,CAAC4xD,GAAL,CAAqC,EAA3B,EAAAt/D,KAAK,CAAC0N,IAAN,CAAW02D,OAAX,CAAqB1W,GAArB,CAAV,CAAP,CAAoD7gD,MAAM,CAACqxD,IAftD,CAkBlB;AAKA;AAUA;AAbA2F,OAAO,CAAC3hD,QAAR,CAAkB,EAAlB,EAAyB,CAAE+hD,MApBT,CAqBlBL,QAAQ,CAAC1hD,QAAT,CAAmB,EAAnB,EAA0B+hD,MArBR,CAyBlBH,IAAI,CAAG,CAAEK,IAAF,CAASh/B,MAAT,CAAkB++B,kBAzBP,CA0BlBH,IAAI,CAAGI,IAAI,CAAGh/B,MAAP,CAAgB++B,kBA1BL,CA4BlBF,gBAAgB,CAAC9hD,QAAjB,CAA2B,CAA3B,EAAiC,EAAI4U,IAAJ,EAAaitC,IAAI,CAAGD,IAApB,CA5Bf,CA6BlBE,gBAAgB,CAAC9hD,QAAjB,CAA2B,CAA3B,EAAiC,CAAE6hD,IAAI,CAAGD,IAAT,GAAoBC,IAAI,CAAGD,IAA3B,CA7Bf,CA+BlB,KAAKN,OAAL,CAAaQ,gBAAb,CAA8BnxD,IAA9B,CAAoCmxD,gBAApC,CA/BkB,CAmClBF,IAAI,CAAG,CAAEK,IAAF,CAASh/B,MAAT,CAAkB++B,kBAnCP,CAoClBH,IAAI,CAAGI,IAAI,CAAGh/B,MAAP,CAAgB++B,kBApCL,CAsClBF,gBAAgB,CAAC9hD,QAAjB,CAA2B,CAA3B,EAAiC,EAAI4U,IAAJ,EAAaitC,IAAI,CAAGD,IAApB,CAtCf,CAuClBE,gBAAgB,CAAC9hD,QAAjB,CAA2B,CAA3B,EAAiC,CAAE6hD,IAAI,CAAGD,IAAT,GAAoBC,IAAI,CAAGD,IAA3B,CAvCf,CAyClB,KAAKJ,OAAL,CAAaM,gBAAb,CAA8BnxD,IAA9B,CAAoCmxD,gBAApC,CAEA,CAED,KAAKR,OAAL,CAAaz3D,WAAb,CAAyB8G,IAAzB,CAA+BhG,MAAM,CAACd,WAAtC,EAAoD+jD,QAApD,CAA8D+T,OAA9D,CAnDgC,CAoDhC,KAAKH,OAAL,CAAa33D,WAAb,CAAyB8G,IAAzB,CAA+BhG,MAAM,CAACd,WAAtC,EAAoD+jD,QAApD,CAA8D8T,QAA9D,CAEA,CAED,CA/DO,GAFuC,CAAhD,C,CAqEA,2D,CACA;;;;;EAMA,GAAM/jE,aAAY,CAAG,SAAWq8B,QAAX,CAAsB,CAE1C,GAAMmoC,QAAO,CAAG,GAAId,sBAApB,CACAc,OAAO,CAACl/B,MAAR,CAAiB,EAHyB,CAK1C,KAAKtQ,OAAL,CAAe,CAAC6C,KAAD,CAAQyB,MAAR,GAAmB,CAEjC+C,QAAQ,CAACrH,OAAT,CAAkB6C,KAAlB,CAAyByB,MAAzB,CAEA,CATyC,CAW1C,KAAKtrB,MAAL,CAAc,CAACN,KAAD,CAAQV,MAAR,GAAmB,CAEhCU,KAAK,CAAC+2D,iBAAN,EAFgC,CAIT,IAAlB,GAAAz3D,MAAM,CAACgT,MAJoB,EAIFhT,MAAM,CAACy3D,iBAAP,EAJE,CAMhCD,OAAO,CAAC36D,MAAR,CAAgBmD,MAAhB,CANgC,CAQhC,GAAM2S,KAAI,CAAG0c,QAAQ,CAAC8B,OAAT,EAAb,CAEA9B,QAAQ,CAACkN,cAAT,IAVgC,CAWhClN,QAAQ,CAACuN,KAAT,EAXgC,CAahCvN,QAAQ,CAACmN,UAAT,CAAqB,CAArB,CAAwB,CAAxB,CAA2B7pB,IAAI,CAACkY,KAAL,CAAa,CAAxC,CAA2ClY,IAAI,CAAC2Z,MAAhD,CAbgC,CAchC+C,QAAQ,CAACoN,WAAT,CAAsB,CAAtB,CAAyB,CAAzB,CAA4B9pB,IAAI,CAACkY,KAAL,CAAa,CAAzC,CAA4ClY,IAAI,CAAC2Z,MAAjD,CAdgC,CAehC+C,QAAQ,CAACruB,MAAT,CAAiBN,KAAjB,CAAwB82D,OAAO,CAACb,OAAhC,CAfgC,CAiBhCtnC,QAAQ,CAACmN,UAAT,CAAqB7pB,IAAI,CAACkY,KAAL,CAAa,CAAlC,CAAqC,CAArC,CAAwClY,IAAI,CAACkY,KAAL,CAAa,CAArD,CAAwDlY,IAAI,CAAC2Z,MAA7D,CAjBgC,CAkBhC+C,QAAQ,CAACoN,WAAT,CAAsB9pB,IAAI,CAACkY,KAAL,CAAa,CAAnC,CAAsC,CAAtC,CAAyClY,IAAI,CAACkY,KAAL,CAAa,CAAtD,CAAyDlY,IAAI,CAAC2Z,MAA9D,CAlBgC,CAmBhC+C,QAAQ,CAACruB,MAAT,CAAiBN,KAAjB,CAAwB82D,OAAO,CAACX,OAAhC,CAnBgC,CAqBhCxnC,QAAQ,CAACkN,cAAT,IAEA,CAED,CApCD,CAuCA;;;;;GAOAw1B,iCAAiC,CAAG,2CAAW1kD,MAAX,CAAoB,CAEvD,GAAM9I,MAAK,CAAG,IAAd,CAEA,KAAK8I,MAAL,CAAcA,MAJyC,CAKvD,KAAKA,MAAL,CAAYgjC,QAAZ,CAAqBqnB,OAArB,CAA8B,KAA9B,CALuD,CAOvD,KAAK1tD,OAAL,GAPuD,CASvD,KAAK2tD,iBAAL,CAAyB,EAT8B,CAUvD,KAAKC,iBAAL,CAAyB,CAV8B,IAYjDC,+BAA8B,CAAGt5B,KAAK,EAAI,CAE/Ch6B,KAAK,CAACozD,iBAAN,CAA0Bp5B,KAE1B,CAhBsD,CAkBjDu5B,8BAA8B,CAAG,IAAM,CACpB,WAAnB,QAAOxjB,OADgC,GAEzC/vC,KAAK,CAACqzD,iBAAN,CAA0BtjB,MAAM,CAACyjB,WAAP,EAAsB,CAFP,CAI5C,CAtBsD,CA0BjDC,mBAAmB,CAAG,CAAC,IAAM,IAE5BC,IAAG,CAAG,GAAI9kE,MAAK,CAAC4F,OAAV,CAAmB,CAAnB,CAAsB,CAAtB,CAAyB,CAAzB,CAFsB,CAI5Bm/D,KAAK,CAAG,GAAI/kE,MAAK,CAACglE,KAJU,CAM5BC,EAAE,CAAG,GAAIjlE,MAAK,CAACklE,UANa,CAQ5BC,EAAE,CAAG,GAAInlE,MAAK,CAACklE,UAAV,CAAsB,CAAEx3D,IAAI,CAACmZ,IAAL,CAAW,EAAX,CAAxB,CAA0C,CAA1C,CAA6C,CAA7C,CAAgDnZ,IAAI,CAACmZ,IAAL,CAAW,EAAX,CAAhD,CARuB,CAQ6C;AAE/E,MAAO,CAAC7Z,YAAD,CAAehD,KAAf,CAAsBo7D,IAAtB,CAA4BC,KAA5B,CAAmCC,MAAnC,GAA8C,CAEpD,GAAMv0D,OAAM,CAAG,GAAI/Q,MAAK,CAAC4F,OAAV,CAAkB,CAAlB,CAAqB,CAArB,CAAwB,CAAxB,CAAf,CAEAmL,MAAM,CAAC4B,UAAP,CAAkB3F,YAAY,CAAC+wB,MAA/B,CAAuC/wB,YAAY,CAACrF,QAApD,CAJoD,CAMpDo9D,KAAK,CAAC54D,GAAN,CAAWi5D,IAAX,CAAiBp7D,KAAjB,CAAwB,CAAEq7D,KAA1B,CAAiC,KAAjC,CANoD,CAMY;AAEhE,GAAMloB,WAAU,CAAG,GAAIn9C,MAAK,CAACklE,UAA7B,CAEgE;AAEA;AAEA;AAJhE/nB,UAAU,CAACooB,YAAX,CAAyBR,KAAzB,CAVoD,CAYpD5nB,UAAU,CAAC2S,QAAX,CAAqBqV,EAArB,CAZoD,CAcpDhoB,UAAU,CAAC2S,QAAX,CAAqBmV,EAAE,CAACO,gBAAH,CAAqBV,GAArB,CAA0B,CAAEQ,MAA5B,CAArB,CAdoD,CAgBpDv0D,MAAM,CAAC00D,eAAP,CAAuBtoB,UAAvB,CAhBoD,CAkBpDpsC,MAAM,CAAC85B,UAAP,CAAkB79B,YAAY,CAACrF,QAA/B,CAAyCoJ,MAAzC,CAlBoD,CAoBpD/D,YAAY,CAAC8D,MAAb,CAAoBC,MAApB,CAEA,CAED,CAlC2B,GA1B2B,CA8DvD,KAAK20D,OAAL,CAAe,IAAM,CAEpBf,8BAA8B,EAFV,CAGG,WAAnB,QAAOxjB,OAHS,GAIlBA,MAAM,CAACyb,gBAAP,CAAyB,mBAAzB,CAA8C+H,8BAA9C,IAJkB,CAKlBxjB,MAAM,CAACyb,gBAAP,CAAyB,mBAAzB,CAA8C8H,8BAA9C,IALkB,EAOpBtzD,KAAK,CAACyF,OAAN,GAEA,CAvEsD,CAyEvD,KAAK4jD,UAAL,CAAkB,IAAM,CACC,WAAnB,QAAOtZ,OADW,GAEpBA,MAAM,CAAC0b,mBAAP,CAA4B,mBAA5B,CAAiD8H,8BAAjD,IAFoB,CAGrBxjB,MAAM,CAAC0b,mBAAP,CAA4B,mBAA5B,CAAiD6H,8BAAjD,IAHqB,EAKvBtzD,KAAK,CAACyF,OAAN,GAEA,CAhFsD,CAkFvD,KAAKnN,MAAL,CAAc,IAAM,CAEnB,GAAK,KAAA0H,KAAK,CAACyF,OAAX,KAEM7M,MAAK,CAAIoH,KAAK,CAACozD,iBAAN,CAAwBx6D,KAAxB,CAAgChK,KAAK,CAAC0N,IAAN,CAAW+/C,QAAX,CAAqBr8C,KAAK,CAACozD,iBAAN,CAAwBx6D,KAA7C,CAAhC,CAAuF,CAFtG,CAGMo7D,IAAI,CAAKh0D,KAAK,CAACozD,iBAAN,CAAwBY,IAAxB,CAAgCplE,KAAK,CAAC0N,IAAN,CAAW+/C,QAAX,CAAqBr8C,KAAK,CAACozD,iBAAN,CAAwBY,IAA7C,CAAhC,CAAuF,CAHtG,CAIMC,KAAK,CAAIj0D,KAAK,CAACozD,iBAAN,CAAwBa,KAAxB,CAAgCrlE,KAAK,CAAC0N,IAAN,CAAW+/C,QAAX,CAAqBr8C,KAAK,CAACozD,iBAAN,CAAwBa,KAA7C,CAAhC,CAAuF,CAJtG,CAKMC,MAAM,CAAGl0D,KAAK,CAACqzD,iBAAN,CAAgCzkE,KAAK,CAAC0N,IAAN,CAAW+/C,QAAX,CAAqBr8C,KAAK,CAACqzD,iBAA3B,CAAhC,CAAuF,CALtG,CAEyG;AAKzGI,mBAAmB,CAAEzzD,KAAK,CAAC8I,MAAR,CAAgBlQ,KAAhB,CAAuBo7D,IAAvB,CAA6BC,KAA7B,CAAoCC,MAApC,CAPnB,CASA,CA7FsD,CA+FvD,KAAKz6D,OAAL,CAAe,UAAY,CAE1B,KAAK4vD,UAAL,EAEA,CAnGsD,CAqGvD,KAAKiL,OAAL,EAEA,C,CAED,GAAMzE,iBAAgB,CAAG,UAAY,IAChCp0D,OAAM,OAD0B,CAE/B60D,YAAY,OAFmB,CAG/BnL,eAAe,OAHgB,CAI7B5uD,QAAQ,CAAG,GAAI3H,MAAK,CAAC4F,OAJQ,CAK7Bm4B,MAAM,CAAG,GAAI/9B,MAAK,CAAC4F,OALU,CAM7BnC,EAAE,CAAG,GAAIzD,MAAK,CAAC4F,OANc,CAO7BhC,EAAE,CAAG,GAAI5D,MAAK,CAAC4F,OAPc,CAQ/B+/D,aAAa,OARkB,CAmDnC;AAzCA,KAAKz/B,wBAAL,CAAgC,CAAC0/B,QAAD,CAAWC,iBAAX,GAAkC,CAChEh5D,MAAM,CAAG+4D,QAAQ,CAACl/D,KAAT,EADuD,CAEhEg7D,YAAY,CAAGkE,QAFiD,CAGhErP,eAAe,CAAGsP,iBAH8C,CAIhEh5D,MAAM,CAACiqB,IAAP,CAAcy/B,eAAe,CAAC1C,SAJkC,CAK5D0C,eAAe,CAACzC,QAL4C,GAM9DjnD,MAAM,CAACkqB,GAAP,CAAaw/B,eAAe,CAACzC,QANiC,EAO5DyC,eAAe,CAACrsB,WAP4C,EAQ9Dr9B,MAAM,CAAClF,QAAP,CAAgBwE,GAAhB,CAAoBoqD,eAAe,CAACrsB,WAAhB,CAA4B,CAA5B,CAApB,CACEqsB,eAAe,CAACrsB,WAAhB,CAA4B,CAA5B,CADF,CACkCqsB,eAAe,CAACrsB,WAAhB,CAA4B,CAA5B,CADlC,CAR8D,CAU5DqsB,eAAe,CAACpsB,QAV4C,EAW9Dt9B,MAAM,CAACsuD,EAAP,CAAUhvD,GAAV,CAAcoqD,eAAe,CAACpsB,QAAhB,CAAyB,CAAzB,CAAd,CAA2CosB,eAAe,CAACpsB,QAAhB,CAAyB,CAAzB,CAA3C,CACEosB,eAAe,CAACpsB,QAAhB,CAAyB,CAAzB,CADF,CAX8D,CAa5DosB,eAAe,CAACtsB,cAb4C,GAc9Dp9B,MAAM,CAACkxB,MAAP,CAAgB,GAAI/9B,MAAK,CAAC4F,OAAV,CAAkB2wD,eAAe,CAACtsB,cAAhB,CAA+B,CAA/B,CAAlB,CACdssB,eAAe,CAACtsB,cAAhB,CAA+B,CAA/B,CADc,CACqBssB,eAAe,CAACtsB,cAAhB,CAA+B,CAA/B,CADrB,CAd8C,CAgB9Dp9B,MAAM,CAACiE,MAAP,CAAcjE,MAAM,CAACkxB,MAArB,CAhB8D,EAkBhElxB,MAAM,CAACu4B,sBAAP,EAlBgE,CAmBhEz9B,QAAQ,CAACkL,IAAT,CAAchG,MAAM,CAAClF,QAArB,EAA+B8F,OAA/B,CAAuCZ,MAAvC,CAnBgE,CAoBhEkxB,MAAM,CAAClrB,IAAP,CAAYhG,MAAM,CAACkxB,MAAnB,EAA2BtwB,OAA3B,CAAmCZ,MAAnC,CACD,CA/BkC,CAiCnC,KAAKi5D,kBAAL,CAA0B,KACxB/nC,MAAM,CAAClrB,IAAP,CAAY6uD,YAAY,CAAC3jC,MAAzB,EAAiCtwB,OAAjC,CAAyCZ,MAAzC,CADwB,CAEjB,CAACkxB,MAAM,CAAC76B,CAAR,CAAW66B,MAAM,CAAC56B,CAAlB,CAFiB,CAjCS,CAsCnC,KAAK+6D,IAAL,CAAYpwD,KAAK,EAAI,IAEfowD,KAAI,CAAGxwD,IAAI,CAAC7K,GAAL,CAAS6+D,YAAY,CAACxD,IAAb,CADM,IAAR,CAAApwD,KACP,CAA0C,CAA1C,CAFQ,CAGnB4zD,YAAY,CAACxD,IAAb,CAAoBA,IAHD,CAInBwD,YAAY,CAACt8B,sBAAb,EACD,CA3CkC,CA6CnC,KAAK2gC,SAAL,CAAiB,CAAC95D,GAAD,CAAMiyD,IAAN,GAAe,CAC9BjyD,GAAG,CAACf,SAAJ,CAAczH,EAAd,CAD8B,CAE9BA,EAAE,CAACgK,OAAH,CAAWZ,MAAX,CAF8B,CAG9B,KAAKm5D,aAAL,CAAmB,CAACviE,EAAE,CAACP,CAAJ,CAAOO,EAAE,CAACN,CAAV,CAAnB,CAAiC+6D,IAAjC,CACD,CAjDkC,CAoDnC,KAAK+H,UAAL,CAAkB,KACT,CAACloC,MAAM,CAAE,KAAK+nC,kBAAL,EAAT,CAAoC5H,IAAI,CAAEwD,YAAY,CAACxD,IAAvD,CADS,CApDiB,CAwDnC,KAAK8H,aAAL,CAAqB,CAAC/6D,MAAD,CAASizD,IAAT,GAAkB,CACrCz6D,EAAE,CAAC0I,GAAH,CAAOlB,MAAM,CAAC,CAAD,CAAb,CAAkBA,MAAM,CAAC,CAAD,CAAxB,CAA6B8yB,MAAM,CAACnxB,CAApC,EAAuCmuD,SAAvC,CAAiDluD,MAAjD,CADqC,CAErCjJ,EAAE,CAACiP,IAAH,CAAQpP,EAAR,EAAY2zB,GAAZ,CAAgBsqC,YAAY,CAAC3jC,MAA7B,CAFqC,CAGrC2jC,YAAY,CAAC3jC,MAAb,CAAoBlrB,IAApB,CAAyBpP,EAAzB,CAHqC,CAIrCi+D,YAAY,CAAC5wD,MAAb,CAAoB4wD,YAAY,CAAC3jC,MAAjC,CAJqC,CAKrC2jC,YAAY,CAAC/5D,QAAb,CAAsBP,GAAtB,CAA0BxD,EAA1B,CALqC,CAMrC89D,YAAY,CAACxD,IAAb,CAAoBA,IANiB,CAOrCwD,YAAY,CAACt8B,sBAAb,EACD,CAhEkC,CAkEnC,KAAK8gC,gBAAL,CAAyB7qD,QAAD,EAAc,EAChCA,QAAQ,SAAR,EAA8C,UAAnB,QAAOA,SADF,IAElCsqD,aAAa,CAAGtqD,QAFkB,CAGrC,CArEkC,CAuEnC,KAAK4iD,eAAL,CAAuB,IAAM,CACvB0H,aAAa,SAAb,EAAwD,UAAxB,QAAOA,cADhB,EAEzBA,aAAa,EAChB,CACF,CA3ED,CA6EAzlE,OAAO,CAACV,QAAR,CAAmBA,Q,CACnBU,OAAO,CAACT,cAAR,CAAyBA,c,CACzBS,OAAO,CAACR,sBAAR,CAAiCA,sB,CACjCQ,OAAO,CAAC2/D,sBAAR,CAAiCA,sB,CACjC3/D,OAAO,CAACP,SAAR,CAAoBA,S,CACpBO,OAAO,CAACN,gBAAR,CAA2BA,gB,CAC3BM,OAAO,CAACL,YAAR,CAAuBA,Y,CACvBK,OAAO,CAAC+gE,gBAAR,CAA2BA,gB;;;;;;GCn4DrB,CAAErhD,KAAF,CAAS3R,OAAT,EAAqB1P,mBAAO,CAAC,CAAD,C,CAE9BiG,SAAS,CAAG,C,CAEVC,WAAW,CAAG,UAAY,CAC9B,MAAO,KAAOD,SAAS,EACxB,C,CAUGy/B,MAAM,CAAG,SAAUkiC,QAAV,CAAoB,IAC3BtmD,OAAM,CAAGsmD,QADkB,CAE3Bt0D,KAAK,CAAG,GAAI+N,MAFe,CAG/B/N,KAAK,CAAC1J,gBAAN,GAH+B,CAI/B0J,KAAK,CAACzM,QAAN,CAAiB,IAJc,IAK3Bo2B,SAAQ,CAAG,EALgB,CAM3Bv0B,IAAI,CAAG,EANoB,CAO3BygC,WAAW,CAAG,EAPa,CAQzB0+B,OAAO,CAAG,GAAIn4D,QARW,CAS3B/I,QAAQ,CAAG,GATgB,CAgB/B;;KAhB+B,CAwB/B;;KAxB+B,CAgC/B;;;;;KAhC+B,CA0C/B;;;;KA1C+B,CAmD/B;;;;;KAnD+B,CA6D/B;;;;;;KA7D+B,CA0E/B;;;;;KA1E+B,CAsF/B;;;;KAtF+B,CA+F/B;;;;KA/F+B,CAwG/B;;;;KAxG+B,CA4H/B;;;;KA5H+B,CA6I/B;;;;;KA7I+B,CA2J/B;;;;;KA3J+B,CA4K/B;;;;;;KA5K+B,CAqM/B;;;;;;;KArM+B,CAkN/B;;;;;;;;KAlN+B,CA4O/B;;;;;;;;KA5O+B,CA2P/B;;;;;;;;KA3P+B,CA4Q/B;;;;;;KA5Q+B,CA4R/B;;;;;KA5R+B,CA6S/B;;;;;;;KA7S+B,CAiU/B;;KAjU+B,CA2V/B;;;;;KA3V+B,CAuW/B;;;KAvW+B,CA+W/B;;;;;;KA/W+B,CAiZ/B;;;;;KAjZ+B,CAma/B;;;;;;;KAna+B,CA2b/B;;;;;;;;KA3b+B,CA8c/B;;;;;;;;KA9c+B,CAie/B;;;;;;;;KAje+B,CAof/B;;;;;;;;IApf+B,CAshB/B;;;;;;;;KAthB+B,CAgjB/B;;;;;;;;KAhjB+B,CA+jB/B;;;;;;;;KA/jB+B,CA8kB/B;;;;;;;;KA9kB+B,CA6lB/B;;;;;;;;KA7lB+B,CA4mB/B;;;;;;KA5mB+B,CA8nB/B;;;;;;KA9nB+B,CAgpB/B;;;;;KAhpB+B,CAmqB/B;;;;;;KAnqB+B,CAqrB/B;;;;KArrB+B,CAysB/B;;;KA/rBAkhE,OAAO,CAACj6D,GAAR,CAAY,CAAZ,CAAe,CAAf,CAAkB,CAAlB,CAAqB,CAArB,CAAwB,CAAxB,CAA2B,CAA3B,CAA8B,CAA9B,CAAiC,CAAjC,CAAoC,CAApC,CAAuC,CAAvC,CAA0C,CAA1C,CAA6C,CAA7C,CAAgD,CAAhD,CAAmD,CAAnD,CAAsD,CAAtD,CAAyD,CAAzD,CAV+B,CAW/B,KAAKrC,sBAAL,GAX+B,CAY/B,KAAKu8D,QAAL,GAZ+B,CAa/B,KAAKrgE,IAAL,CAAYvB,WAAW,EAbQ,CAmB/B,KAAK6hE,iBAAL,CAAyB,IAAM,CAC7B9qC,QAAQ,CAACnC,OAAT,CAAiBiX,KAAK,EAAIA,KAAK,CAACg2B,iBAAN,EAA1B,CAD6B,CAE7B5+B,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAIA,UAAU,CAAC5V,aAAX,IAAlC,CACD,CAtB8B,CA2B/B,KAAK08D,iBAAL,CAAyB,IAAM,CAC7B/qC,QAAQ,CAACnC,OAAT,CAAiBiX,KAAK,EAAIA,KAAK,CAACi2B,iBAAN,EAA1B,CAD6B,CAE7B7+B,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAIA,UAAU,CAAC5V,aAAX,IAAlC,CACD,CA9B8B,CAsC/B,KAAKA,aAAL,CAAsBK,IAAD,EAAU,CAC7B2H,KAAK,CAACjI,OAAN,CAAgBM,IACjB,CAxC8B,CA+C/B,KAAKP,aAAL,CAAqB,IACZkI,KAAK,CAACjI,OAhDgB,CAyD/B,KAAK+X,QAAL,CAAgB,IACP9P,KA1DsB,CAoE/B,KAAKiQ,iBAAL,CAAyB0kD,cAAc,EAAI,CACzCJ,OAAO,CAACj6D,GAAR,CAAY,GAAGq6D,cAAf,CADyC,CAEzC30D,KAAK,CAACtC,MAAN,CAAasD,IAAb,CAAkBuzD,OAAlB,CAFyC,CAGzCv0D,KAAK,CAACyyD,iBAAN,EACD,CAxE8B,CAgF/B,KAAK/7D,OAAL,CAAgBk+D,MAAD,EAAY,CACrBA,MAAM,EAAe,EAAX,GAAAA,MADW,GAEvBx/D,IAAI,CAAGw/D,MAFgB,CAI1B,CApF8B,CA2F/B,KAAKC,OAAL,CAAe,IACNz/D,IA5FsB,CAoG/B,KAAK0/D,SAAL,CAAiB,IACR9mD,MArGsB,CA6G/B,KAAK+mD,oBAAL,CAA4B,IAAM,CAChC,GAAMC,MAAK,CAAG,EAAd,CACA,GAAa,EAAT,GAAA5/D,IAAJ,CAAiB,CACf4/D,KAAK,CAAC7iE,IAAN,CAAWiD,IAAX,CADe,CAEf,IAAK,GACG6/D,WADH,CAAIC,CAAC,CAAGlnD,MAAb,CAAqBknD,CAAC,SAAtB,EACQD,UADR,CACqBC,CAAC,CAACL,OAAF,EADrB,CAEqB,EAAf,GAAAI,UAFN,EAGID,KAAK,CAACG,OAAN,CAAcF,UAAd,CAHJ,CAKEC,CAAC,CAAGA,CAAC,CAACJ,SAAF,EAEP,CACD,MAAOE,MACR,CA1H8B,CAiI/B,KAAKI,WAAL,CAAmB,IAAM,CACvB,GAAMJ,MAAK,CAAG,KAAKD,oBAAL,EAAd,CACA,GAAmB,CAAf,CAAAC,KAAK,CAACrjE,MAAV,CAAsB,CACpB,GAAIsqB,SAAQ,CAAG+4C,KAAK,CAAC9pB,KAAN,EAAf,CAIA,MAHA8pB,MAAK,CAACxtC,OAAN,CAAc7J,IAAI,EAAI,CACpB1B,QAAQ,CAAGA,QAAQ,CAACN,MAAT,CAAgB,GAAhB,CAAqBgC,IAArB,CACZ,CAFD,CAGA,CAAO1B,QACR,CACD,MAAO,EACR,CA3I8B,CAmJ/B,KAAKo5C,WAAL,CAAoBT,MAAD,EAAY,CAC7B,GAAIh0B,YAAW,CAAG,GAAIxO,OAAJ,CAAW,IAAX,CAAlB,CAIA,MAHAwO,YAAW,CAAClqC,OAAZ,CAAoBk+D,MAApB,CAGA,CAFAjrC,QAAQ,CAACx3B,IAAT,CAAcyuC,WAAd,CAEA,CADA5gC,KAAK,CAACzK,GAAN,CAAUqrC,WAAW,CAAC9wB,QAAZ,EAAV,CACA,CAAO8wB,WACR,CAzJ8B,CAiK/B,KAAK00B,gBAAL,CAAwBC,SAAS,EAAI,CACnC,GAAIA,SAAJ,CAEE,OADMC,eAAc,CAAGD,SAAS,CAAC77C,WAAV,EACvB,CAASjoB,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGk4B,QAAQ,CAACh4B,MAA7B,CAAqCF,CAAC,EAAtC,CACE,GAAIk4B,QAAQ,CAACl4B,CAAD,CAAR,CAAYojE,OAAZ,GAAsBn7C,WAAtB,KAAwC87C,cAA5C,CACE,MAAO7rC,SAAQ,CAACl4B,CAAD,CAItB,CA1K8B,CAmL/B,KAAKgkE,0BAAL,CAAkCC,SAAS,EAAI,CAM7C,GALIA,SAAS,EAAuB,CAAnB,CAAAA,SAAS,CAAC/jE,MAK3B,EAJuB,EAAjB,GAAA+jE,SAAS,CAAC,CAAD,CAIf,EAHIA,SAAS,CAACxqB,KAAV,EAGJ,CAAIwqB,SAAS,EAAuB,CAAnB,CAAAA,SAAS,CAAC/jE,MAA3B,CAAuC,CACrC,GAAMivC,YAAW,CAAG,KAAK00B,gBAAL,CAAsBI,SAAS,CAAC,CAAD,CAA/B,CAApB,CADqC,MAEjC90B,YAFiC,EAGnC80B,SAAS,CAACxqB,KAAV,EAHmC,CAI5BtK,WAAW,CAAC60B,0BAAZ,CAAuCC,SAAvC,CAJ4B,QAQtC,CACD,MAAO,KACR,CAnM8B,CA6M/B,KAAKC,iBAAL,CAA0Bh4C,IAAD,EAAU,CACjC,GAAM+3C,UAAS,CAAG/3C,IAAI,CAACtE,KAAL,CAAW,GAAX,CAAlB,CACA,MAAO,MAAKo8C,0BAAL,CAAgCC,SAAhC,CACR,CAhN8B,CA2N/B,KAAKE,4BAAL,CAAoCF,SAAS,EAAI,CAM/C,GALuB,CAAnB,CAAAA,SAAS,CAAC/jE,MAKd,EAJuB,EAAjB,GAAA+jE,SAAS,CAAC,CAAD,CAIf,EAHIA,SAAS,CAACxqB,KAAV,EAGJ,CAAuB,CAAnB,CAAAwqB,SAAS,CAAC/jE,MAAd,CAA0B,CACxB,GAAIivC,YAAW,CAAG,KAAK00B,gBAAL,CAAsBI,SAAS,CAAC,CAAD,CAA/B,CAAlB,CAKA,MAJK90B,YAIL,GAHEA,WAAW,CAAG,KAAKy0B,WAAL,CAAiBK,SAAS,CAAC,CAAD,CAA1B,CAGhB,EADAA,SAAS,CAACxqB,KAAV,EACA,CAAOtK,WAAW,CAACg1B,4BAAZ,CAAyCF,SAAzC,CACR,CACD,MAAO,KACR,CA1O8B,CAqP/B,KAAKG,mBAAL,CAA4Bl4C,IAAD,EAAU,CACnC,GAAM+3C,UAAS,CAAG/3C,IAAI,CAACtE,KAAL,CAAW,GAAX,CAAlB,CACA,MAAO,MAAKu8C,4BAAL,CAAkCF,SAAlC,CACR,CAxP8B,CAoQ/B,KAAK70B,yBAAL,CAAkCljB,IAAD,EAAU,CACzC,GAAIijB,YAAW,CAAG,KAAK+0B,iBAAL,CAAuBh4C,IAAvB,CAAlB,CAIA,MAHKijB,YAGL,GAFEA,WAAW,CAAG,KAAKi1B,mBAAL,CAAyBl4C,IAAzB,CAEhB,EAAOijB,WACR,CA1Q8B,CAmR/B,KAAK7K,aAAL,CAAqBnoB,UAAU,EAAI,CAC7BA,UAD6B,GAE/BA,UAAU,CAACrZ,SAAX,CAAqB,IAArB,CAF+B,CAG/ByL,KAAK,CAACzK,GAAN,CAAUqY,UAAU,CAAC7e,KAArB,CAH+B,CAI/B8mC,WAAW,CAAC1jC,IAAZ,CAAiByb,UAAjB,CAJ+B,CAK/B,KAAK3V,sBAAL,GAL+B,CAOlC,CA1R8B,CAkS/B,KAAKihC,gBAAL,CAAwBtrB,UAAU,EAAI,CACpC,IAAK,GAAInc,EAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGokC,WAAW,CAAClkC,MAAhC,CAAwCF,CAAC,EAAzC,CACE,GAAImc,UAAU,GAAKioB,WAAW,CAACpkC,CAAD,CAA9B,CAIE,MAHAuO,MAAK,CAACvK,MAAN,CAAamY,UAAU,CAAC7e,KAAxB,CAGA,CAFA8mC,WAAW,CAAC5xB,MAAZ,CAAmBxS,CAAnB,CAAsB,CAAtB,CAEA,KADAmc,WAAU,CAAC5U,OAAX,EAIL,CA3S8B,CAqT/B,KAAKqgC,0BAAL,CAAmCy8B,UAAD,EAAgB,CAChD,GAAI,KAAK79D,sBAAT,CAAiC,SACjC,GAAI69D,UAAJ,CAEE,OADIz9D,KAAI,GACR,CAAS5G,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGk4B,QAAQ,CAACh4B,MAA7B,CAAqCF,CAAC,EAAtC,CAEG,GADA4G,IAAI,CAAGsxB,QAAQ,CAACl4B,CAAD,CAAR,CAAY4nC,0BAAZ,CAAuCy8B,UAAvC,CACP,CAAIz9D,IAAJ,CAAU,SAGf,QACD,CA/T8B,CAoU/B,KAAK+gC,yBAAL,CAAiC,CAAC28B,WAAD,CAAcC,WAAd,CAA2BF,UAA3B,IAC/BjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAChC,GAAIA,UAAU,CAAC7e,KAAX,EAAoB6e,UAAU,CAAC7e,KAAX,CAAiBgJ,OAAzC,CACE,GAAIi+D,WAAJ,CAAiB,CACf,GAAIxiE,OAAM,CAAGoa,UAAU,CAACpa,MAAxB,CACIA,MAAM,EAAIA,MAAM,CAACmH,SAAP,EAFC,EAGbo7D,WAAW,CAAC5jE,IAAZ,CAAiBqB,MAAM,CAACzE,KAAxB,CAEH,CALD,IAMEgnE,YAAW,CAAC5jE,IAAZ,CAAiByb,UAAU,CAAC7e,KAA5B,CAGL,CAXD,CAD+B,CAa3B+mE,UAb2B,EAc7BnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9BA,WAAW,CAACxH,yBAAZ,CAAsC28B,WAAtC,CAAmDC,WAAnD,CACEF,UADF,CAED,CAHD,CAd6B,CAmB/B,KAAK79D,sBAAL,GAnB+B,CAoBxB89D,WApBwB,CApUF,CAiW/B,KAAK3hE,WAAL,CAAmBC,UAAU,EAAI,CAC/BhB,QAAQ,CAAGgB,UADoB,CAE/BwhC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAIA,UAAU,CAACxZ,WAAX,CAAuBC,UAAvB,CAAlC,CAF+B,CAG/Bs1B,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAIA,WAAW,CAACxsC,WAAZ,CAAwBC,UAAxB,CAAhC,CACD,CArW8B,CA2W/B,KAAKC,WAAL,CAAmB,IACVjB,QA5WsB,CAsX/B,KAAK8G,cAAL,CAAsB27D,UAAU,EAAI,CAClC,GAAIG,aAAJ,CAA8BroC,YAA9B,CAuBA,MAtBAiI,YAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAChCggB,YAAY,CAAGhgB,UAAU,CAACzT,cAAX,EADiB,CAE5ByzB,YAF4B,GAG1B,MAAAqoC,YAH0B,CAI5BA,YAAY,CAAGroC,YAAY,CAAC/4B,KAAb,EAJa,CAM5BohE,YAAY,CAAC59C,KAAb,CAAmBuV,YAAnB,CAN4B,CASjC,CATD,CAsBA,CAZIkoC,UAYJ,EAXEnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9BhT,YAAY,CAAGgT,WAAW,CAACzmC,cAAZ,CAA2B27D,UAA3B,CADe,CAE1BloC,YAF0B,GAGxB,MAAAqoC,YAHwB,CAI1BA,YAAY,CAAGroC,YAAY,CAAC/4B,KAAb,EAJW,CAM1BohE,YAAY,CAAC59C,KAAb,CAAmBuV,YAAnB,CAN0B,CAS/B,CATD,CAWF,CAAOqoC,YACR,CA/Y8B,CAuZ/B,KAAKr+B,KAAL,CAAak+B,UAAU,EAAI,CACrBA,UADqB,EAEvBnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAIA,WAAW,CAAChJ,KAAZ,CAAkBk+B,UAAlB,CAAhC,CAFuB,CAIzBjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAChC5N,KAAK,CAACvK,MAAN,CAAamY,UAAU,CAAC7e,KAAxB,CADgC,CAEhC6e,UAAU,CAAC5U,OAAX,EACD,CAHD,CAJyB,CAQzB2wB,QAAQ,CAAG,EARc,CASzBkM,WAAW,CAAG,EACf,CAja8B,CA2a/B,KAAKoC,gBAAL,CAAwB,CAACrqB,UAAD,CAAakoD,UAAb,GAA4B,CAClD,IAAK,GAAIrkE,EAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGokC,WAAW,CAAClkC,MAAhC,CAAwCF,CAAC,EAAzC,CACE,GAAImc,UAAU,GAAKioB,WAAW,CAACpkC,CAAD,CAA9B,CACE,SAGJ,GAAIqkE,UAAJ,CACE,IAAK,GAAIrkE,GAAC,CAAG,CAAb,CAAgBA,EAAC,CAAGk4B,QAAQ,CAACh4B,MAA7B,CAAqCF,EAAC,EAAtC,CACE,GAAIk4B,QAAQ,CAACl4B,EAAD,CAAR,CAAYwmC,gBAAZ,CAA6BrqB,UAA7B,CAAyCkoD,UAAzC,CAAJ,CACE,SAIN,QACD,CAzb8B,CAoc/B,KAAKlhC,eAAL,CAAuB,CAAC3c,gBAAD,CAAmB69C,UAAnB,GAAkC,CACvDjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAC5BA,UAAU,CAACnf,UADiB,EAE9BwpB,gBAAgB,CAACrK,UAAD,CACnB,CAHD,CADuD,CAKnDkoD,UALmD,EAMrDnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAIA,WAAW,CAAChM,eAAZ,CAC9B3c,gBAD8B,CACZ69C,UADY,CAAhC,CAEH,CA5c8B,CAud/B,KAAKjhC,eAAL,CAAuB,CAAC5c,gBAAD,CAAmB69C,UAAnB,GAAkC,CACvDjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAC5BA,UAAU,CAACgE,UADiB,EAE9BqG,gBAAgB,CAACrK,UAAD,CACnB,CAHD,CADuD,CAKnDkoD,UALmD,EAMrDnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAIA,WAAW,CAAC/L,eAAZ,CAC9B5c,gBAD8B,CACZ69C,UADY,CAAhC,CAEH,CA/d8B,CA0e/B,KAAKhhC,eAAL,CAAuB,CAAC7c,gBAAD,CAAmB69C,UAAnB,GAAkC,CACvDjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAC5BA,UAAU,CAACkV,UADiB,EAE9B7K,gBAAgB,CAACrK,UAAD,CACnB,CAHD,CADuD,CAKnDkoD,UALmD,EAMrDnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAIA,WAAW,CAAC9L,eAAZ,CAC9B7c,gBAD8B,CACZ69C,UADY,CAAhC,CAEH,CAlf8B,CA6f/B,KAAK/gC,WAAL,CAAmB,CAAC9c,gBAAD,CAAmB69C,UAAnB,GAAkC,CACnDjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAC5BA,UAAU,CAAC4X,OADiB,EAE9BvN,gBAAgB,CAACrK,UAAD,CACnB,CAHD,CADmD,CAK/CkoD,UAL+C,EAMjDnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAIA,WAAW,CAAC7L,WAAZ,CAC9B9c,gBAD8B,CACZ69C,UADY,CAAhC,CAEH,CArgB8B,CAugB/B,KAAKxgC,2BAAL,CAAmC,CAACthC,YAAD,CAAe8hE,UAAf,IACjCjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAC5BA,UAAU,CAAC5Z,YAAX,GAA4BA,YADA,EAE9BwhC,YAAY,CAACrjC,IAAb,CAAkByb,UAAlB,CACH,CAHD,CADiC,CAK7BkoD,UAL6B,EAM/BnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9B,GAAIs1B,aAAY,CAAGt1B,WAAW,CAACtL,2BAAZ,CAAwCthC,YAAxC,CAAsD8hE,UAAtD,CAAnB,CACAtgC,YAAY,CAACrjC,IAAb,CAAkB,GAAG+jE,YAArB,CACD,CAHD,CAN+B,CAY1B1gC,YAZ0B,CAvgBJ,CA+hB/B,KAAKH,wBAAL,CAAgC,CAACtiC,SAAD,CAAY+iE,UAAZ,GAA2B,CACzD,GAAMtgC,aAAY,CAAG,EAArB,CAaA,MAZAK,YAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,IAC1BuoD,gBAAe,CAAGvoD,UAAU,CAAC7a,SAAX,CAAuB6a,UAAU,CAAC7a,SAAX,CAAqB2mB,WAArB,EAAvB,CAA4D9L,UAAU,CAAC7a,SAD/D,CAE1BqjE,cAAc,CAAGrjE,SAAS,CAAGA,SAAS,CAAC2mB,WAAV,EAAH,CAA6B3mB,SAF7B,CAG5BojE,eAAe,GAAKC,cAHQ,EAI9B5gC,YAAY,CAACrjC,IAAb,CAAkByb,UAAlB,CACH,CALD,CAYA,CANIkoD,UAMJ,EALEnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9B,GAAIs1B,aAAY,CAAGt1B,WAAW,CAACvL,wBAAZ,CAAqCtiC,SAArC,CAAgD+iE,UAAhD,CAAnB,CACAtgC,YAAY,CAACrjC,IAAb,CAAkB,GAAG+jE,YAArB,CACD,CAHD,CAKF,CAAO1gC,YACR,CA9iB8B,CAyjB/B,KAAKR,2BAAL,CAAmC,CAACjiC,SAAD,CAAY+iE,UAAZ,GAA2B,IACtDO,gBAAe,CAAG,KAAKhhC,wBAAL,CAA8BtiC,SAA9B,CAAyC+iE,UAAzC,CADoC,CAEtDQ,eAAe,CAAGD,eAAe,CAACE,MAAhB,CAAuBh2B,SAAS,EAAIA,SAAS,CAAC9xC,UAA9C,CAFoC,CAG5D,MAAO6nE,gBACR,CA7jB8B,CAwkB/B,KAAKphC,0BAAL,CAAkC,CAACniC,SAAD,CAAY+iE,UAAZ,GAA2B,IACrDO,gBAAe,CAAG,KAAKhhC,wBAAL,CAA8BtiC,SAA9B,CAAyC+iE,UAAzC,CADmC,CAErDU,cAAc,CAAGH,eAAe,CAACE,MAAhB,CAAuBh2B,SAAS,EAAIA,SAAS,CAACzd,UAA9C,CAFoC,CAG3D,MAAO0zC,eACR,CA5kB8B,CAulB/B,KAAKrhC,0BAAL,CAAkC,CAACpiC,SAAD,CAAY+iE,UAAZ,GAA2B,IACrDO,gBAAe,CAAG,KAAKhhC,wBAAL,CAA8BtiC,SAA9B,CAAyC+iE,UAAzC,CADmC,CAErDW,cAAc,CAAGJ,eAAe,CAACE,MAAhB,CAAuBh2B,SAAS,EAAIA,SAAS,CAAC3uB,UAA9C,CAFoC,CAG3D,MAAO6kD,eACR,CA3lB8B,CAsmB/B,KAAKrhC,sBAAL,CAA8B,CAACriC,SAAD,CAAY+iE,UAAZ,GAA2B,IACjDO,gBAAe,CAAG,KAAKhhC,wBAAL,CAA8BtiC,SAA9B,CAAyC+iE,UAAzC,CAD+B,CAEjDY,UAAU,CAAGL,eAAe,CAACE,MAAhB,CAAuBh2B,SAAS,EAAIA,SAAS,CAAC/a,OAA9C,CAFoC,CAGvD,MAAOkxC,WACR,CA1mB8B,CAmnB/B,KAAK7qB,aAAL,CAAqBiqB,UAAU,EAAI,CACjC,GAAMtgC,aAAY,CAAG,CAAC,GAAGK,WAAJ,CAArB,CAOA,MANIigC,WAMJ,EALEnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9B,GAAIs1B,aAAY,CAAGt1B,WAAW,CAACiL,aAAZ,CAA0BiqB,UAA1B,CAAnB,CACAtgC,YAAY,CAACrjC,IAAb,CAAkB,GAAG+jE,YAArB,CACD,CAHD,CAKF,CAAO1gC,YACR,CA5nB8B,CAqoB9B,KAAKmhC,eAAL,CAAuBb,UAAU,EAAI,CACpC,GAAMtgC,aAAY,CAAG,CAAC,GAAG7L,QAAJ,CAArB,CAOA,MANImsC,WAMJ,EALEnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9B,GAAMs1B,aAAY,CAAGt1B,WAAW,CAAC+1B,eAAZ,CAA4Bb,UAA5B,CAArB,CACAtgC,YAAY,CAACrjC,IAAb,CAAkB,GAAG+jE,YAArB,CACD,CAHD,CAKF,CAAO1gC,YACR,CA9oB8B,CAspB/B,KAAK5+B,cAAL,CAAsB,IAAM,CAC1B,GAAIi/B,WAAW,CAAC,CAAD,CAAX,MAAJ,CACE,MAAOA,YAAW,CAAC,CAAD,CAAX,CAAej/B,cAAf,EAAP,CAEA,IAAK,GACGE,KADH,CAAIrF,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGk4B,QAAQ,CAACh4B,MAA7B,CAAqCF,CAAC,EAAtC,CAEE,GADMqF,IACN,CADa6yB,QAAQ,CAACl4B,CAAD,CAAR,CAAYmF,cAAZ,EACb,CAAa,CAAC,CAAV,GAAAE,IAAJ,CACE,MAAOA,KAAP,CAGN,MAAO,CAAC,CACT,CAjqB8B,CA0qB/B,KAAKU,YAAL,CAAoB,CAACV,IAAD,CAAOg/D,UAAP,GAAsB,CACxCjgC,WAAW,CAACrO,OAAZ,CAAoB5Z,UAAU,EAAI,CAChCA,UAAU,CAACpW,YAAX,CAAwBV,IAAxB,CACD,CAFD,CADwC,CAIpCg/D,UAJoC,EAKtCnsC,QAAQ,CAACnC,OAAT,CAAiBoZ,WAAW,EAAI,CAC9BA,WAAW,CAACppC,YAAZ,CAAyBV,IAAzB,CACD,CAFD,CAIH,CAnrB8B,CA0rB/B,KAAKc,aAAL,CAAqB,IAAM,CACzB,IAAK,GAAInG,EAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGokC,WAAW,CAAClkC,MAAhC,CAAwCF,CAAC,EAAzC,CACE,GAAIokC,WAAW,CAACpkC,CAAD,CAAX,CAAemG,aAAf,EAAJ,CACE,SAGJ,IAAK,GAAInG,IAAC,CAAG,CAAb,CAAgBA,GAAC,CAAGk4B,QAAQ,CAACh4B,MAA7B,CAAqCF,GAAC,EAAtC,CACE,GAAIk4B,QAAQ,CAACl4B,GAAD,CAAR,CAAYmG,aAAZ,EAAJ,CACE,SAIJ,QACD,CAvsB8B,CA6sB/B,KAAKo4B,gBAAL,CAAwB,CAACvF,QAAD,CAAWxuB,KAAX,CAAkBxB,aAAlB,CAAiC5L,OAAjC,CAA0CinE,UAA1C,GAAyD,CAC/E;AACA,GAAMc,WAAU,CAAG,KAAK/qB,aAAL,CAAmBiqB,UAAnB,CAAnB,CAIA;AACA,GAJAc,UAAU,CAACpvC,OAAX,CAAmB5Z,UAAU,EAAI,CAC/BA,UAAU,CAAC5R,MAAX,CAAkByuB,QAAQ,CAAGxuB,KAA7B,CAAoCxB,aAApC,CAAmD5L,OAAnD,CACD,CAFD,CAIA,CAAIA,OAAO,EAAIA,OAAO,CAAC6L,cAAnB,EAAsC,KAAAD,aAA1C,EACoC,CAA9B,CAAA5L,OAAO,CAACoM,YAAR,CAAqBtJ,MAD3B,CACuC,IAC7BT,IAAG,CAAG2K,IAAI,CAAC3K,GAAL,CAAS,GAAGrC,OAAO,CAACoM,YAApB,CADuB,CAE7BjK,GAAG,CAAG6K,IAAI,CAAC7K,GAAL,CAAS,GAAGnC,OAAO,CAACoM,YAApB,CAFuB,CAGnC27D,UAAU,CAACpvC,OAAX,CAAmB5Z,UAAU,EAAI,CAC/BA,UAAU,CAACvS,mBAAX,CAA+BnK,GAA/B,CAAoCF,GAApC,CAAyCnC,OAAzC,CACD,CAFD,CAGD,CAEJ,CACF,C,CAEDR,OAAO,CAAC+jC,MAAR,CAAiBA,M;;;;;;AChvBjB,GAAMjkC,MAAK,CAAGzB,mBAAO,CAAC,CAAD,CAArB,CAEA;;;;;;;GAQA2B,OAAO,CAAC2lC,OAAR,CAAkB,SAAU9G,OAAV,CAAmB,CACnC,GAAI2pC,YAAW,CAAG3pC,OAAlB,CACA,KAAKlyB,MAAL,CAAc,GAAI7M,MAAK,CAACshC,kBAAV,CACZ,CAAC,EADW,CACN,EADM,CACD,EADC,CACI,CAAC,EADL,CACU,GADV,CACgB,EADhB,CAFqB,CAInC,KAAKqnC,MAAL,OAJmC,IAK/BhoE,SAAQ,CAAG,GAAIX,MAAK,CAACsB,cALU,CAM/BoC,QAAQ,CAAG,GAAIoV,aAAJ,CAAkB,CAC/B,CAAC,CAD8B,CACzB,CAAC,CADwB,CAClB,CADkB,CAE9B,CAF8B,CAEzB,CAAC,CAFwB,CAElB,CAFkB,CAG9B,CAH8B,CAGxB,CAHwB,CAGlB,CAHkB,CAI9B,CAJ8B,CAIxB,CAJwB,CAIlB,CAJkB,CAK/B,CAAC,CAL8B,CAKxB,CALwB,CAKlB,CALkB,CAM/B,CAAC,CAN8B,CAMzB,CAAC,CANwB,CAMlB,CANkB,CAAlB,CANoB,CAc/B8vD,kBAAkB,CAAG,GAAI5oE,MAAK,CAAC+Y,eAAV,CAA2BrV,QAA3B,CAAqC,CAArC,CAdU,CAenC/C,QAAQ,CAAC0H,YAAT,CAAuB,UAAvB,CAAmCugE,kBAAnC,CAfmC,CAgBnC,GAAI5nE,SAAQ,CAAG,GAAIhB,MAAK,CAACqC,iBAAV,CAA6B,CAAEb,KAAK,CAAE,OAAT,CAC1C0e,SAAS,GADiC,CAE1CC,UAAU,GAFgC,CAG1Cpf,OAAO,CAAE,EAHiC,CAI1CY,WAAW,GAJ+B,CAA7B,CAAf,CAKA,KAAK6nC,IAAL,CAAY,GAAIxpC,MAAK,CAACyC,IAAV,CAAgB9B,QAAhB,CAA0BK,QAA1B,CArBuB,IAsB/B6nE,KAAI,CAAG,GAAI7oE,MAAK,CAAC0F,IAtBc,CAuB/BojE,OAAO,CAAG,GAAI9oE,MAAK,CAAC4F,OAvBW,CAyBnC,KAAK6lC,qBAAL,CAA6B,CAACvoC,CAAD,CAAIC,CAAJ,GAAU,CACrC0lE,IAAI,CAAC79D,sBAAL,CAA4B49D,kBAA5B,EAAgD19D,SAAhD,CAA0D49D,OAA1D,CADqC,IAEjCC,MAAK,CAAGD,OAAO,CAACpiE,KAAR,GAAgB+G,OAAhB,CAAwB,KAAKZ,MAA7B,CAFyB,CAGjCm8D,SAAS,CAAG,GAAIhpE,MAAK,CAAC4F,OAAV,CAAkB1C,CAAlB,CAAqBC,CAArB,CAAwB4lE,KAAK,CAACn8D,CAA9B,EAAiCmuD,SAAjC,CAA2C,KAAKluD,MAAhD,CAHqB,CAIrC,MAAOm8D,UAAS,CAAC5xC,GAAV,CAAc0xC,OAAd,CACR,CA9BkC,CAgCnC,GAAI5iC,yBAAwB,CAAG,CAAC+iC,QAAD,CAAWlK,WAAX,GAA4B,CACrD2J,WAAW,CAAC77D,MAAZ,CAAmBiqB,IADkC,GAEvD,KAAKjqB,MAAL,CAAYiqB,IAAZ,CAAmB4xC,WAAW,CAAC77D,MAAZ,CAAmBiqB,IAFiB,EAGrDioC,WAAW,CAACjL,QAHyC,GAIvD,KAAKjnD,MAAL,CAAYkqB,GAAZ,CAAkBgoC,WAAW,CAACjL,QAJyB,EAKrDiL,WAAW,CAAC70B,WALyC,EAMvD,KAAKr9B,MAAL,CAAYlF,QAAZ,CAAqBwE,GAArB,CAAyB4yD,WAAW,CAAC70B,WAAZ,CAAwB,CAAxB,CAAzB,CACE60B,WAAW,CAAC70B,WAAZ,CAAwB,CAAxB,CADF,CAC8B60B,WAAW,CAAC70B,WAAZ,CAAwB,CAAxB,CAD9B,CANuD,CAQrD60B,WAAW,CAAC50B,QARyC,EASvD,KAAKt9B,MAAL,CAAYsuD,EAAZ,CAAehvD,GAAf,CAAmB4yD,WAAW,CAAC50B,QAAZ,CAAqB,CAArB,CAAnB,CAA4C40B,WAAW,CAAC50B,QAAZ,CAAqB,CAArB,CAA5C,CACE40B,WAAW,CAAC50B,QAAZ,CAAqB,CAArB,CADF,CATuD,CAWrD40B,WAAW,CAAC90B,cAXyC,EAYvD,KAAKp9B,MAAL,CAAYiE,MAAZ,CAAmB,GAAI9Q,MAAK,CAAC4F,OAAV,CAAkBm5D,WAAW,CAAC90B,cAAZ,CAA2B,CAA3B,CAAlB,CACjB80B,WAAW,CAAC90B,cAAZ,CAA2B,CAA3B,CADiB,CACc80B,WAAW,CAAC90B,cAAZ,CAA2B,CAA3B,CADd,CAAnB,CAZuD,CAczD,KAAKp9B,MAAL,CAAYqxD,IAAZ,CAAmB,EAAI+K,QAdkC,CAezD,KAAKp8D,MAAL,CAAYu4B,sBAAZ,EACD,CAhBD,CAkBA,KAAK8jC,WAAL,CAAmB,IAAM,IACnBnrC,OAAM,CAAG,GAAI/9B,MAAK,CAAC4F,OAAV,GAAoBiN,IAApB,CACX61D,WAAW,CAAC77D,MAAZ,CAAmBkxB,MADR,EACgBtwB,OADhB,CACwBi7D,WAAW,CAAC77D,MADpC,CADU,CAGnBpJ,EAAE,CAAG,GAAIzD,MAAK,CAAC4F,OAAV,CAAkB,CAAC,CAAnB,CAAsB,CAAC,CAAvB,CAA0Bm4B,MAAM,CAACnxB,CAAjC,EAAoCmuD,SAApC,CAA8C2N,WAAW,CAAC77D,MAA1D,CAHc,CAInBjJ,EAAE,CAAG,GAAI5D,MAAK,CAAC4F,OAAV,CAAkB,CAAlB,CAAqB,CAAC,CAAtB,CAAyBm4B,MAAM,CAACnxB,CAAhC,EAAmCmuD,SAAnC,CAA6C2N,WAAW,CAAC77D,MAAzD,CAJc,CAKnB/I,EAAE,CAAG,GAAI9D,MAAK,CAAC4F,OAAV,CAAkB,CAAlB,CAAqB,CAArB,CAAwBm4B,MAAM,CAACnxB,CAA/B,EAAkCmuD,SAAlC,CAA4C2N,WAAW,CAAC77D,MAAxD,CALc,CAMnBs8D,EAAE,CAAG,GAAInpE,MAAK,CAAC4F,OAAV,CAAkB,CAAC,CAAnB,CAAsB,CAAtB,CAAyBm4B,MAAM,CAACnxB,CAAhC,EAAmCmuD,SAAnC,CAA6C2N,WAAW,CAAC77D,MAAzD,CANc,CAQvB+7D,kBAAkB,CAAC5vD,iBAAnB,CADY,CAACvV,EAAD,CAAKG,EAAL,CAASE,EAAT,CAAaA,EAAb,CAAiBqlE,EAAjB,CAAqB1lE,EAArB,CACZ,CARuB,CASvBmlE,kBAAkB,CAACzhE,WAAnB,GACD,CA5DkC,CA8DnC,KAAKoiC,YAAL,CAAoB,IAAM,CACxB,KAAK2/B,WAAL,EADwB,IAEpBE,cAAa,CAAGV,WAAW,CAAC/6D,qBAAZ,EAFI,CAGpB7K,WAAW,CAAG4lE,WAAW,CAAC18D,cAAZ,EAHM,CAIxB,GAAIlJ,WAAJ,CAAiB,CACf;AADe,GAETmmE,SAAQ,CAAGnmE,WAAW,CAACC,GAAZ,CAAgB0I,UAAhB,CAA2B3I,WAAW,CAACD,GAAvC,CAFF,CAGTqP,MAAM,CAAG+2D,QAAQ,CAAG,CAHX,CAITtmC,OAAO,CAAG,CAAC7/B,WAAW,CAACC,GAAZ,CAAgBG,CAAhB,CAAoBJ,WAAW,CAACD,GAAZ,CAAgBK,CAArC,EAA0C,CAJ3C,CAKT0/B,OAAO,CAAG,CAAC9/B,WAAW,CAACC,GAAZ,CAAgBI,CAAhB,CAAoBL,WAAW,CAACD,GAAZ,CAAgBM,CAArC,EAA0C,CAL3C,CAMT0/B,OAAO,CAAG,CAAC//B,WAAW,CAACC,GAAZ,CAAgB6J,CAAhB,CAAoB9J,WAAW,CAACD,GAAZ,CAAgB+J,CAArC,EAA0C,CAN3C,CAQT05B,QAAQ,CAAG8iC,aAAa,CAACrmC,8BAAd,CACfJ,OADe,CACNC,OADM,CACGC,OADH,CACY3wB,MADZ,CACoB,EADpB,CACwBA,MAAM,CAF3B,CACH,CARF,CAUfg0B,wBAAwB,CAAC+iC,QAAD,CAAW3iC,QAAX,CACzB,CACF,CACF,C;;;;;;GCzFKtmC,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACf8qE,QAAQ,CAAG9qE,mBAAO,CAAC,EAAD,CAAP,CAA0ByB,KAA1B,C,CACXnB,QAAQ,CAAGN,mBAAO,CAAC,CAAD,CAAP,CAAiCM,Q,CAC5CyqE,IAAI,CAAG/qE,mBAAO,CAAC,EAAD,C,CACd47B,OAAO,CAAG57B,mBAAO,CAAC,EAAD,CAAP,CAA4B6jB,O,CAEtCM,UAAU,CAAG1iB,KAAK,CAACupE,oB,CAEnBjqE,WAAW,CAAG,SAAUkqE,MAAV,CAAkB,CACpC;AACA,GAAIC,KAAJ,CACID,MAAM,EAAIA,MAAM,CAAClpE,UAHe,GAIrCmpE,IAAI,CAAGD,MAJ8B,KAKhCE,KAAI,OAL4B,CAMhCC,MAAM,OAN0B,CAOhC9+C,UAAU,GAPsB,CAQhC++C,SAAS,OARuB,CAUhCC,sBAAsB,CAAGx+C,IAAI,EAAI,CACnC,GAAMrqB,SAAQ,CAAGyoE,IAAI,CAAC7oE,KAAL,CAAWI,QAAX,CAAoB0F,KAApB,EAAjB,CACA1F,QAAQ,CAACE,YAAT,GAFmC,IAG5B6vC,YAAW,CAAG,GAAIlyC,SAHU,CAI/BirE,UAAU,CAAG,GAAIpnD,WAJc,CAK/B/hB,QAAQ,CAAGmpE,UAAU,CAACxkD,KAAX,CAAiB+F,IAAjB,CALoB,CAMzB7oB,IAAI,CAAG,GAAIxC,MAAK,CAACyC,IAAV,CAAe9B,QAAQ,CAACA,QAAxB,CAAkCK,QAAlC,CANkB,CAUlC,MAHA+vC,YAAW,CAACpwC,QAAZ,CAAuB6B,IAAI,CAAC7B,QAG5B,CAFAowC,WAAW,CAACnwC,KAAZ,CAAoB4B,IAEpB,CADAuuC,WAAW,CAACnwC,KAAZ,CAAkBwE,QAAlB,CAA6B2rC,WAC7B,CAAOA,WACT,CArBmC,CAuBhCg5B,kBAAkB,CAAGC,EAAE,EAAI,CAC9B,OAAQA,EAAE,CAACvyD,IAAH,CAAQwyD,MAAhB,EACC,IAAK,SAAL,CACKv4D,OAAO,CAAC8rC,GAAR,CAAYwsB,EAAE,CAACvyD,IAAH,CAAQ4tC,OAApB,CADL,CAEK,MACL,IAAK,QAAL,CACE,GAAM6kB,IAAG,CAAG,GAAI5qE,YAAJ,CAAgBuqE,sBAAsB,CAACG,EAAE,CAACvyD,IAAH,CAAQyC,MAAT,CAAtC,CAAZ,CACI0vD,SAFN,EAGGA,SAAS,CAACM,GAAD,CAHZ,CAIEN,SAAS,OAJX,CAKE/+C,UAAU,GALZ,CAMK,MACL,QACE,KAAM,iCAAN,CAZH,CAcA,CAtCmC,CAwChC9K,UAAU,CAAGypD,MAAM,EAAI,CAI1B,GAHI,SAAAF,IAGJ,GAFDK,MAAM,CAAGL,IAAI,CAAC/qE,mBAAA,CAAgB,EAAhB,CAAD,CAEZ,EAAI,CAACorE,MAAL,CACED,IAAI,CAAG,IAAKnrE,mBAAO,CAAC,EAAD,CAAP,CAAyC4rE,mBAA9C,EAAmEX,MAAnE,CADT,KAGD,IAAIA,MAAM,EAAIA,MAAM,CAAClpE,UAArB,CAAiC,IAC3BkC,KAAI,CAAGgnE,MAAM,CAAC5oE,KADa,CAE3ByqB,IAAI,CAAG7oB,IAAI,CAAC7B,QAAL,CAAc+F,KAAd,GAAsBoT,WAAtB,CAAkCtX,IAAI,CAAC+M,MAAvC,EAA+CmH,MAA/C,EAFoB,CAG/BizD,MAAM,CAAC/M,gBAAP,CAAwB,SAAxB,CAAmC,SAAUoN,EAAV,CAAc,CAChDD,kBAAkB,CAACC,EAAD,CAClB,CAFD,CAH+B,CAM/BL,MAAM,CAACS,WAAP,CAAmB,CAACH,MAAM,CAAE,YAAT,CAAuB/vD,MAAM,CAAEmR,IAA/B,CAAnB,CACD,CAEA,CAxDmC,CA0DpC,KAAKg/C,eAAL,CAAuB,IAAM,CAC9B,GAAMC,QAAO,CAAG,GAAIjB,SAAJ,CAAaI,IAAI,CAAC7oE,KAAlB,CAAhB,CACG,MAAO,IAAI2pE,mBAAJ,CAAuBD,OAAvB,CACR,CA7DmC,CA+DpC,KAAKE,WAAL,CAAmB,IAAMf,IA/DW,CAiEpC,GAAMc,mBAAkB,CAAGE,OAAO,EAAI,CACtC,GAAMzpE,SAAQ,CAAGyoE,IAAI,CAAC7oE,KAAL,CAAWI,QAAX,CAAoB0F,KAApB,EAAjB,CACA1F,QAAQ,CAACE,YAAT,GAFsC,IAGhCwpE,QAAO,CAAGD,OAAO,CAACE,MAAR,CAAe3pE,QAAf,CAHsB,CAI7B+vC,WAAW,CAAG,GAAIlyC,SAJW,CAQnC,MAHAkyC,YAAW,CAACpwC,QAAZ,CAAuB+pE,OAAO,CAAC/pE,QAG/B,CAFAowC,WAAW,CAACnwC,KAAZ,CAAoB8pE,OAEpB,CADA35B,WAAW,CAACnwC,KAAZ,CAAkBwE,QAAlB,CAA6B2rC,WAC7B,CAAOA,WACT,CATD,CAWA,KAAK65B,MAAL,CAAcC,GAAG,EAAI,CACpBnB,IAAI,CAACkB,MAAL,CAAYC,GAAZ,CACA,CA9EmC,CAgFpC,GAAMC,WAAU,CAAG,CAACC,aAAD,CAAgBd,MAAhB,CAAwB7vC,OAAxB,CAAiCC,MAAjC,GAA4C,CAC9D,GAAI,CAACxP,UAAL,CAAiB,IACZroB,KAAI,CAAGuoE,aAAa,CAACnqE,KADT,CAEVyqB,IAAI,CAAG7oB,IAAI,CAAC7B,QAAL,CAAc+F,KAAd,GAAsBoT,WAAtB,CAAkCtX,IAAI,CAAC+M,MAAvC,EAA+CmH,MAA/C,EAFG,CAGhBkzD,SAAS,CAAGxvC,OAHI,CAIhBvP,UAAU,GAJM,CAKhB8+C,MAAM,CAACS,WAAP,CAAmB,CAACH,MAAM,CAAEA,MAAT,CAAiB/vD,MAAM,CAAEmR,IAAzB,CAAnB,CACA,CAND,IAOCgP,OAAM,CAAC,aAAD,CAEP,CAVD,CAYA,KAAK2wC,SAAL,CAAiBD,aAAa,EACtB,GAAI5wC,QAAJ,CAAY,CAACC,OAAD,CAAUC,MAAV,GAAqB,CACvC,GAAIsvC,MAAJ,CACCmB,UAAU,CAACC,aAAD,CAAgB,WAAhB,CAA6B3wC,OAA7B,CAAsCC,MAAtC,CADX,KAEO,IACAle,OAAM,CAAGutD,IAAI,CAACsB,SAAL,CAAeD,aAAf,CADT,CAEAE,MAAM,CAAG,GAAI3rE,YAAJ,CAAgBirE,kBAAkB,CAACpuD,MAAD,CAAlC,CAFT,CAGN8uD,MAAM,CAACL,MAAP,CAAczuD,MAAd,CAHM,CAINie,OAAO,CAAC6wC,MAAD,CACP,CACD,CATM,CA7F4B,CAyGpC,KAAKC,QAAL,CAAgBH,aAAa,EACrB,GAAI5wC,QAAJ,CAAY,CAACC,OAAD,CAAUC,MAAV,GAAqB,CACvC,GAAIsvC,MAAJ,CACCmB,UAAU,CAACC,aAAD,CAAgB,WAAhB,CAA6B3wC,OAA7B,CAAsCC,MAAtC,CADX,KAEO,IACAle,OAAM,CAAGutD,IAAI,CAACwB,QAAL,CAAcH,aAAd,CADT,CAEAE,MAAM,CAAG,GAAI3rE,YAAJ,CAAgBirE,kBAAkB,CAACpuD,MAAD,CAAlC,CAFT,CAGN8uD,MAAM,CAACL,MAAP,CAAczuD,MAAd,CAHM,CAINie,OAAO,CAAC6wC,MAAD,CACP,CACD,CATM,CA1G4B,CAsHpC,KAAK/gD,KAAL,CAAa6gD,aAAa,EAClB,GAAI5wC,QAAJ,CAAY,CAACC,OAAD,CAAUC,MAAV,GAAqB,CACvC,GAAIsvC,MAAJ,CACCmB,UAAU,CAACC,aAAD,CAAgB,WAAhB,CAA6B3wC,OAA7B,CAAsCC,MAAtC,CADX,KAEO,IACAle,OAAM,CAAGutD,IAAI,CAACx/C,KAAL,CAAW6gD,aAAX,CADT,CAEAE,MAAM,CAAG,GAAI3rE,YAAJ,CAAgBirE,kBAAkB,CAACpuD,MAAD,CAAlC,CAFT,CAGN8uD,MAAM,CAACL,MAAP,CAAczuD,MAAd,CAHM,CAINie,OAAO,CAAC6wC,MAAD,CACP,CACD,CATM,CAvH4B,CAmIpC,KAAKE,eAAL,CAAuB,IAAM,CACxBxB,MADwB,EAE3BA,MAAM,CAACyB,SAAP,EACD,CAtImC,CAwIpCrrD,UAAU,CAACypD,MAAD,CACX,C,CAEDtpE,OAAO,CAACZ,WAAR,CAAsBA,W;;;;;;;ACjJrB,GAAI+pE,SAAJ,CACCpsD,OAAO,CAAG,IADX,CAECouD,QAAQ,CAAG,CAFZ,CAGCC,KAAK,CAAG,CAHT,CAICC,IAAI,CAAG,CAJR,CAKCC,QAAQ,CAAG,CALZ,CAOCvrE,MAAM,CAACC,OAAP,CAAiB,SAAUF,KAAV,CAAkB,CACjC,GAAIqpE,SAAQ,CAAG,SAAU1oE,QAAV,CAAqB,CAClC;AACA,GAAI2C,EAAJ,CAAOmoE,SAAP,CACE57D,IADF,CACQL,MADR,CACgBnM,aADhB,CAC+BqL,GAD/B,CAEEg9D,OAFF,CAGEC,QAAQ,CAAG,EAHb,CAQA,GAFIhrE,QAAQ,CAACu1B,gBAEb,GADEv1B,QAAQ,CAAG,GAAIX,MAAK,CAACnB,QAAV,GAAqBoS,kBAArB,CAAwCtQ,QAAxC,CACb,EAAKA,QAAQ,WAAYX,MAAK,CAACnB,QAA/B,CACE,KAAK0Q,MAAL,CAAc,GAAIvP,MAAK,CAACiO,OAD1B,KAEO,IAAKtN,QAAQ,CAACqU,MAAd,CAELrU,QAAQ,CAACqQ,YAAT,EAFK,CAGL,KAAKzB,MAAL,CAAc5O,QAAQ,CAAC4O,MAAT,CAAgB7I,KAAhB,EAHT,CAIL/F,QAAQ,CAAGA,QAAQ,CAACA,QAJf,CAKDA,QAAQ,CAACu1B,gBALR,GAMHv1B,QAAQ,CAAG,GAAIX,MAAK,CAACnB,QAAV,GAAqBoS,kBAArB,CAAwCtQ,QAAxC,CANR,EAOHA,QAAQ,CAACsU,aAAT,EAPG,CAQHtU,QAAQ,CAACmS,oBAAT,IARG,MASA,GAAKnS,QAAQ,WAAY0oE,SAAQ,CAACuC,IAAlC,CAGL,MAFA,MAAKC,IAAL,CAAYlrE,QAEZ,CADA,KAAK4O,MAAL,CAAc,GAAIvP,MAAK,CAACiO,OACxB,CAAO,IAAP,CAEA,KAAM,yCAdD,CAiBP,IAAM3K,CAAC,CAAG,CAAJ,CAAOmoE,SAAS,CAAG9qE,QAAQ,CAAC4C,KAAT,CAAeC,MAAxC,CAAgDF,CAAC,CAAGmoE,SAApD,CAA+DnoE,CAAC,EAAhE,CAAqE,CAKnE,GAJAuM,IAAI,CAAGlP,QAAQ,CAAC4C,KAAT,CAAeD,CAAf,CAIP,CAHAD,aAAa,CAAG1C,QAAQ,CAAC0C,aAAT,CAAuB,CAAvB,EAA0BC,CAA1B,CAGhB,CAFAooE,OAAO,CAAG,GAAIrC,SAAQ,CAACyC,OAEvB,CAAKj8D,IAAI,WAAY7P,MAAK,CAACsR,KAA3B,CACE9B,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAClM,CAAxB,CADX,CAE0B+K,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IAF9G,CAG0BqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CAHnC,CAIEc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAJF,CAKEm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CALF,CAOEA,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAChM,CAAxB,CAPX,CAQ0B6K,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IAR9G,CAS0BqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CATnC,CAUEc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAVF,CAWEm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CAXF,CAaEA,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAC9L,CAAxB,CAbX,CAc0B2K,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IAd9G,CAe0BqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CAfnC,CAgBEc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAhBF,CAiBEm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CAjBF,KAkBO,IAAK,MAAOxP,MAAK,CAACgsE,KAAlB,CACLx8D,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAClM,CAAxB,CADJ,CAEmB+K,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IAFvG,CAGmBqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CAH5B,CAILc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAJK,CAKLm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CALK,CAOLA,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAChM,CAAxB,CAPJ,CAQmB6K,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IARvG,CASmBqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CAT5B,CAULc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAVK,CAWLm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CAXK,CAaLA,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAC9L,CAAxB,CAbJ,CAcmB2K,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IAdvG,CAemBqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CAf5B,CAgBLc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAhBK,CAiBLm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CAjBK,CAmBLA,MAAM,CAAG7O,QAAQ,CAAC+C,QAAT,CAAmBmM,IAAI,CAAC6c,CAAxB,CAnBJ,CAoBmBhe,GAAG,CAAGrL,aAAa,CAAG,GAAIrD,MAAK,CAACiD,OAAV,CAAmBI,aAAa,CAAC,CAAD,CAAb,CAAiBH,CAApC,CAAuCG,aAAa,CAAC,CAAD,CAAb,CAAiBF,CAAxD,CAAH,CAAiE,IApBvG,CAqBmBqM,MAAM,CAAG,GAAI65D,SAAQ,CAAC0C,MAAb,CAAqBv8D,MAAM,CAACtM,CAA5B,CAA+BsM,MAAM,CAACrM,CAAtC,CAAyCqM,MAAM,CAAC5C,CAAhD,CAAmDiD,IAAI,CAACK,aAAL,CAAmB,CAAnB,CAAnD,CAA0ExB,GAA1E,CArB5B,CAsBLc,MAAM,CAAC1D,YAAP,CAAoB,KAAKyD,MAAzB,CAtBK,CAuBLm8D,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuBwL,MAAvB,CAvBK,KAyBL,MAAM,8BAAgClM,CAAtC,CAGFooE,OAAO,CAACO,mBAAR,EAnDmE,CAoDnEN,QAAQ,CAAC3nE,IAAT,CAAe0nE,OAAf,CACD,CAED,KAAKG,IAAL,CAAY,GAAIxC,SAAQ,CAACuC,IAAb,CAAmBD,QAAnB,CACb,CArFD,CAwiBA,MAldAtC,SAAQ,CAACjlE,SAAT,CAAmB8mE,QAAnB,CAA8B,SAAUgB,UAAV,CAAuB,CACnD,GAAIvoE,EAAC,CAAG,KAAKkoE,IAAL,CAAUnlE,KAAV,EAAR,CACE7C,CAAC,CAAGqoE,UAAU,CAACL,IAAX,CAAgBnlE,KAAhB,EADN,CAaA,MAVA/C,EAAC,CAACoyB,MAAF,EAUA,CATApyB,CAAC,CAACwoE,MAAF,CAAUtoE,CAAV,CASA,CARAA,CAAC,CAACsoE,MAAF,CAAUxoE,CAAV,CAQA,CAPAE,CAAC,CAACkyB,MAAF,EAOA,CANAlyB,CAAC,CAACsoE,MAAF,CAAUxoE,CAAV,CAMA,CALAE,CAAC,CAACkyB,MAAF,EAKA,CAJApyB,CAAC,CAACyoE,KAAF,CAASvoE,CAAC,CAACwoE,WAAF,EAAT,CAIA,CAHA1oE,CAAC,CAACoyB,MAAF,EAGA,CAFApyB,CAAC,CAAG,GAAI0lE,SAAJ,CAAc1lE,CAAd,CAEJ,CADAA,CAAC,CAAC4L,MAAF,CAAW,KAAKA,MAChB,CAAO5L,CACR,CAmcD,CAlcA0lE,QAAQ,CAACjlE,SAAT,CAAmB8lB,KAAnB,CAA2B,SAAUgiD,UAAV,CAAuB,CAChD,GAAIvoE,EAAC,CAAG,KAAKkoE,IAAL,CAAUnlE,KAAV,EAAR,CACE7C,CAAC,CAAGqoE,UAAU,CAACL,IAAX,CAAgBnlE,KAAhB,EADN,CAWA,MARA/C,EAAC,CAACwoE,MAAF,CAAUtoE,CAAV,CAQA,CAPAA,CAAC,CAACsoE,MAAF,CAAUxoE,CAAV,CAOA,CANAE,CAAC,CAACkyB,MAAF,EAMA,CALAlyB,CAAC,CAACsoE,MAAF,CAAUxoE,CAAV,CAKA,CAJAE,CAAC,CAACkyB,MAAF,EAIA,CAHApyB,CAAC,CAACyoE,KAAF,CAASvoE,CAAC,CAACwoE,WAAF,EAAT,CAGA,CAFA1oE,CAAC,CAAG,GAAI0lE,SAAJ,CAAc1lE,CAAd,CAEJ,CADAA,CAAC,CAAC4L,MAAF,CAAW,KAAKA,MAChB,CAAO5L,CACR,CAqbD,CApbA0lE,QAAQ,CAACjlE,SAAT,CAAmB4mE,SAAnB,CAA+B,SAAUkB,UAAV,CAAuB,CACpD,GAAIvoE,EAAC,CAAG,KAAKkoE,IAAL,CAAUnlE,KAAV,EAAR,CACE7C,CAAC,CAAGqoE,UAAU,CAACL,IAAX,CAAgBnlE,KAAhB,EADN,CAYA,MATA/C,EAAC,CAACoyB,MAAF,EASA,CARAlyB,CAAC,CAACsoE,MAAF,CAAUxoE,CAAV,CAQA,CAPAE,CAAC,CAACkyB,MAAF,EAOA,CANApyB,CAAC,CAACwoE,MAAF,CAAUtoE,CAAV,CAMA,CALAA,CAAC,CAACsoE,MAAF,CAAUxoE,CAAV,CAKA,CAJAA,CAAC,CAACyoE,KAAF,CAASvoE,CAAC,CAACwoE,WAAF,EAAT,CAIA,CAHA1oE,CAAC,CAACoyB,MAAF,EAGA,CAFApyB,CAAC,CAAG,GAAI0lE,SAAJ,CAAc1lE,CAAd,CAEJ,CADAA,CAAC,CAAC4L,MAAF,CAAW,KAAKA,MAChB,CAAO5L,CACR,CAsaD,CAraA0lE,QAAQ,CAACjlE,SAAT,CAAmBkoE,UAAnB,CAAgC,UAAW,CACzC,GAAIhpE,EAAJ,CAAO0M,CAAP,CAKE07D,OALF,CAKWa,qBALX,CAOEC,YAPF,CAOgBC,YAPhB,CAO8BC,YAP9B,CAQEl9D,MARF,CAQUK,IARV,CASE88D,UATF,CACEp9D,MAAM,CAAG,GAAIvP,MAAK,CAACiO,OAAV,GAAoB2+D,UAApB,CAAgC,KAAKr9D,MAArC,CADX,CAEE5O,QAAQ,CAAG,GAAIX,MAAK,CAACnB,QAFvB,CAGE8sE,QAAQ,CAAG,KAAKE,IAAL,CAAUQ,WAAV,EAHb,CAIEQ,aAAa,CAAGlB,QAAQ,CAACnoE,MAJ3B,CAMEspE,YAAY,CAAG,EANjB,CAWA,IAAMxpE,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGupE,aAAjB,CAAgCvpE,CAAC,EAAjC,CAIE,IAHAooE,OAAO,CAAGC,QAAQ,CAACroE,CAAD,CAGlB,CAFAipE,qBAAqB,CAAGb,OAAO,CAAChoE,QAAR,CAAiBF,MAEzC,CAAMwM,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGu8D,qBAAjB,CAAwCv8D,CAAC,EAAzC,CACE28D,UAAU,CAAG,EADf,CAGEn9D,MAAM,CAAGk8D,OAAO,CAAChoE,QAAR,CAAiB,CAAjB,CAHX,CAIEipE,UAAU,CAAC3oE,IAAX,CAAiB,GAAIhE,MAAK,CAACiD,OAAV,CAAmBuM,MAAM,CAAC+B,EAAP,CAAUrO,CAA7B,CAAgCsM,MAAM,CAAC+B,EAAP,CAAUpO,CAA1C,CAAjB,CAJF,CAKEqM,MAAM,CAAG,GAAIxP,MAAK,CAAC4F,OAAV,CAAmB4J,MAAM,CAACtM,CAA1B,CAA6BsM,MAAM,CAACrM,CAApC,CAAuCqM,MAAM,CAAC5C,CAA9C,CALX,CAME4C,MAAM,CAAC1D,YAAP,CAAoByD,MAApB,CANF,CAQ6E,WAAtE,QAAOu9D,aAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CAR1B,EAWIjM,QAAQ,CAAC+C,QAAT,CAAkBM,IAAlB,CAAwBwL,MAAxB,CAXJ,CAYIg9D,YAAY,CAAGM,YAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CAAZ,CAA6DjM,QAAQ,CAAC+C,QAAT,CAAkBF,MAAlB,CAA2B,CAZ3G,EASIgpE,YAAY,CAAGM,YAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CAT/B,CAeE4C,MAAM,CAAGk8D,OAAO,CAAChoE,QAAR,CAAiBsM,CAAC,CAAC,CAAnB,CAfX,CAgBE28D,UAAU,CAAC3oE,IAAX,CAAiB,GAAIhE,MAAK,CAACiD,OAAV,CAAmBuM,MAAM,CAAC+B,EAAP,CAAUrO,CAA7B,CAAgCsM,MAAM,CAAC+B,EAAP,CAAUpO,CAA1C,CAAjB,CAhBF,CAiBEqM,MAAM,CAAG,GAAIxP,MAAK,CAAC4F,OAAV,CAAmB4J,MAAM,CAACtM,CAA1B,CAA6BsM,MAAM,CAACrM,CAApC,CAAuCqM,MAAM,CAAC5C,CAA9C,CAjBX,CAkBE4C,MAAM,CAAC1D,YAAP,CAAoByD,MAApB,CAlBF,CAmB6E,WAAtE,QAAOu9D,aAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CAnB1B,EAsBIjM,QAAQ,CAAC+C,QAAT,CAAkBM,IAAlB,CAAwBwL,MAAxB,CAtBJ,CAuBIi9D,YAAY,CAAGK,YAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CAAZ,CAA6DjM,QAAQ,CAAC+C,QAAT,CAAkBF,MAAlB,CAA2B,CAvB3G,EAoBIipE,YAAY,CAAGK,YAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CApB/B,CA0BE4C,MAAM,CAAGk8D,OAAO,CAAChoE,QAAR,CAAiBsM,CAAjB,CA1BX,CA2BE28D,UAAU,CAAC3oE,IAAX,CAAiB,GAAIhE,MAAK,CAACiD,OAAV,CAAmBuM,MAAM,CAAC+B,EAAP,CAAUrO,CAA7B,CAAgCsM,MAAM,CAAC+B,EAAP,CAAUpO,CAA1C,CAAjB,CA3BF,CA4BEqM,MAAM,CAAG,GAAIxP,MAAK,CAAC4F,OAAV,CAAmB4J,MAAM,CAACtM,CAA1B,CAA6BsM,MAAM,CAACrM,CAApC,CAAuCqM,MAAM,CAAC5C,CAA9C,CA5BX,CA6BE4C,MAAM,CAAC1D,YAAP,CAAoByD,MAApB,CA7BF,CA8B6E,WAAtE,QAAOu9D,aAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CA9B1B,EAiCIjM,QAAQ,CAAC+C,QAAT,CAAkBM,IAAlB,CAAwBwL,MAAxB,CAjCJ,CAkCIk9D,YAAY,CAAGI,YAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CAAZ,CAA6DjM,QAAQ,CAAC+C,QAAT,CAAkBF,MAAlB,CAA2B,CAlC3G,EA+BIkpE,YAAY,CAAGI,YAAY,CAAEt9D,MAAM,CAACtM,CAAP,CAAW,GAAX,CAAiBsM,MAAM,CAACrM,CAAxB,CAA4B,GAA5B,CAAkCqM,MAAM,CAAC5C,CAA3C,CA/B/B,CAqCEiD,IAAI,CAAG,GAAI7P,MAAK,CAACsR,KAAV,CACLk7D,YADK,CAELC,YAFK,CAGLC,YAHK,CAIL,GAAI1sE,MAAK,CAAC4F,OAAV,CAAmB8lE,OAAO,CAAC9jE,MAAR,CAAe1E,CAAlC,CAAqCwoE,OAAO,CAAC9jE,MAAR,CAAezE,CAApD,CAAuDuoE,OAAO,CAAC9jE,MAAR,CAAegF,CAAtE,CAJK,CArCT,CA4CEjM,QAAQ,CAAC4C,KAAT,CAAeS,IAAf,CAAqB6L,IAArB,CA5CF,CA6CElP,QAAQ,CAAC0C,aAAT,CAAuB,CAAvB,EAA0BW,IAA1B,CAAgC2oE,UAAhC,CA7CF,CAiDF,MAAOhsE,SACR,CAmWD,CAlWA0oE,QAAQ,CAACjlE,SAAT,CAAmBvD,gBAAnB,CAAsC,UAAY,IAC5CF,SAAQ,CAAG,KAAK2rE,UAAL,EADiC,CAE5CzvD,cAAc,CAAG,GAAI7c,MAAK,CAACsB,cAAV,GAA2BqX,YAA3B,CAAwChY,QAAxC,CAF2B,CAIhD,MAAOkc,eACR,CA6VD,CA5VAwsD,QAAQ,CAACjlE,SAAT,CAAmBumE,MAAnB,CAA4B,SAAU3pE,QAAV,CAAqB,CAC/C,GAAIL,SAAQ,CAAG,KAAKE,gBAAL,EAAf,CACE2B,IAAI,CAAG,GAAIxC,MAAK,CAACyC,IAAV,CAAgB9B,QAAhB,CAA0BK,QAA1B,CADT,CAMA,MAHAwB,KAAI,CAACmF,QAAL,CAAcsiB,qBAAd,CAAqC,KAAK1a,MAA1C,CAGA,CAFA/M,IAAI,CAAC06C,QAAL,CAAc6vB,qBAAd,CAAqC,KAAKx9D,MAA1C,CAEA,CAAO/M,IACR,CAoVD,CAjVA6mE,QAAQ,CAACyC,OAAT,CAAmB,SAAUpoE,QAAV,CAAgC,CACzCA,QAAQ,WAAYsP,MADqB,GAE/CtP,QAAQ,CAAG,EAFoC,EAKjD,KAAKA,QAAL,CAAgBA,QALiC,CAM1B,CAAlB,CAAAA,QAAQ,CAACF,MANmC,CAO/C,KAAKyoE,mBAAL,EAP+C,CAS/C,KAAKrkE,MAAL,CAAc,KAAK6kB,CAAL,OAEjB,CAsUD,CArUA48C,QAAQ,CAACyC,OAAT,CAAiB1nE,SAAjB,CAA2B6nE,mBAA3B,CAAiD,UAAW,CAC1D,GAAItoE,EAAC,CAAG,KAAKD,QAAL,CAAc,CAAd,CAAR,CACEG,CAAC,CAAG,KAAKH,QAAL,CAAc,CAAd,CADN,CAEEK,CAAC,CAAG,KAAKL,QAAL,CAAc,CAAd,CAFN,CAUA,MANA,MAAKkE,MAAL,CAAc/D,CAAC,CAAC6C,KAAF,GAAUwkE,QAAV,CAAoBvnE,CAApB,EAAwBiP,KAAxB,CACZ7O,CAAC,CAAC2C,KAAF,GAAUwkE,QAAV,CAAoBvnE,CAApB,CADY,EAEZoM,SAFY,EAMd,CAFA,KAAK0c,CAAL,CAAS,KAAK7kB,MAAL,CAAYlB,KAAZ,GAAoBw0D,GAApB,CAAyBv3D,CAAzB,CAET,CAAO,IACR,CAyTD,CAxTA0lE,QAAQ,CAACyC,OAAT,CAAiB1nE,SAAjB,CAA2BsC,KAA3B,CAAmC,UAAW,CAC5C,GAAIpD,EAAJ,CAAO0pE,aAAP,CACEtB,OAAO,CAAG,GAAIrC,SAAQ,CAACyC,OADzB,CAGA,IAAMxoE,CAAC,CAAG,CAAJ,CAAO0pE,aAAa,CAAG,KAAKtpE,QAAL,CAAcF,MAA3C,CAAmDF,CAAC,CAAG0pE,aAAvD,CAAsE1pE,CAAC,EAAvE,CACEooE,OAAO,CAAChoE,QAAR,CAAiBM,IAAjB,CAAuB,KAAKN,QAAL,CAAcJ,CAAd,EAAiBoD,KAAjB,EAAvB,EAIF,MAFAglE,QAAO,CAACO,mBAAR,EAEA,CAAOP,OACR,CA8SD,CA5SArC,QAAQ,CAACyC,OAAT,CAAiB1nE,SAAjB,CAA2B6oE,IAA3B,CAAkC,UAAW,CAC3C,GAAI3pE,EAAJ,CAAOI,QAAQ,CAAG,EAAlB,CAKA,IAHA,KAAKkE,MAAL,CAAYiE,cAAZ,CAA4B,CAAC,CAA7B,CAGA,CAFA,KAAK4gB,CAAL,EAAU,CAAC,CAEX,CAAMnpB,CAAC,CAAG,KAAKI,QAAL,CAAcF,MAAd,CAAuB,CAAjC,CAAyC,CAAL,EAAAF,CAApC,CAA4CA,CAAC,EAA7C,CACEI,QAAQ,CAACM,IAAT,CAAe,KAAKN,QAAL,CAAcJ,CAAd,CAAf,EAIF,MAFA,MAAKI,QAAL,CAAgBA,QAEhB,CAAO,IACR,CAgSD,CA/RA2lE,QAAQ,CAACyC,OAAT,CAAiB1nE,SAAjB,CAA2B8oE,cAA3B,CAA4C,SAAU19D,MAAV,CAAmB,CAC7D,GAAI29D,WAAU,CAAG,KAAKvlE,MAAL,CAAYszD,GAAZ,CAAiB1rD,MAAjB,EAA4B,KAAKid,CAAlD,CAD6D,MAGxD0gD,WAAU,CAAG,CAAClwD,OAH0C,CAIpDsuD,IAJoD,CAKjD4B,UAAU,CAAGlwD,OALoC,CAMpDquD,KANoD,CAQpDD,QAEV,CAqRD,CApRAhC,QAAQ,CAACyC,OAAT,CAAiB1nE,SAAjB,CAA2BgpE,YAA3B,CAA0C,SAAU1B,OAAV,CAAoB,CAC5D,GAAIpoE,EAAJ,CAAOkM,MAAP,CAAe69D,cAAf,CACEC,YAAY,CAAG,CADjB,CAEEC,YAAY,CAAG,CAFjB,CAGEP,aAAa,CAAGtB,OAAO,CAAChoE,QAAR,CAAiBF,MAHnC,CAKA,IAAMF,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAG0pE,aAAjB,CAAgC1pE,CAAC,EAAjC,CACEkM,MAAM,CAAGk8D,OAAO,CAAChoE,QAAR,CAAiBJ,CAAjB,CADX,CAEE+pE,cAAc,CAAG,KAAKH,cAAL,CAAqB19D,MAArB,CAFnB,CAGO69D,cAAc,GAAK/B,KAH1B,CAIIgC,YAAY,EAJhB,CAKcD,cAAc,GAAK9B,IALjC,EAMIgC,YAAY,EANhB,CAN4D,MAgBxC,EAAf,CAAAD,YAAY,EAAyB,CAAjB,GAAAC,YAhBmC,CAiBnDjC,KAjBmD,CAkB/B,CAAjB,GAAAgC,YAAY,EAAyB,CAAf,CAAAC,YAlB0B,CAmBnDhC,IAnBmD,CAoB/B,CAAjB,GAAA+B,YAAY,EAA2B,CAAjB,GAAAC,YApB0B,CAqBnDlC,QArBmD,CAuBnDG,QAEV,CA2PD,CA1PAnC,QAAQ,CAACyC,OAAT,CAAiB1nE,SAAjB,CAA2BopE,YAA3B,CAA0C,SAAU9B,OAAV,CAAmB+B,cAAnB,CAAmCC,aAAnC,CAAkDC,KAAlD,CAAyDC,IAAzD,CAAgE,CACxG,GAAIP,eAAc,CAAG,KAAKD,YAAL,CAAmB1B,OAAnB,CAArB,CAEA,GAAK2B,cAAc,GAAKhC,QAAxB,CAEE,CAAsC,CAApC,MAAKzjE,MAAL,CAAYszD,GAAZ,CAAiBwQ,OAAO,CAAC9jE,MAAzB,EAAwC6lE,cAAxC,CAAyDC,aAA3D,EAA2E1pE,IAA3E,CAAiF0nE,OAAjF,CAFF,KAIO,IAAK2B,cAAc,GAAK/B,KAAxB,CAELqC,KAAK,CAAC3pE,IAAN,CAAY0nE,OAAZ,CAFK,KAIA,IAAK2B,cAAc,GAAK9B,IAAxB,CAELqC,IAAI,CAAC5pE,IAAL,CAAW0nE,OAAX,CAFK,KAIA,CAEL,GAAIsB,cAAJ,CACE1pE,CADF,CACK0M,CADL,CACQ69D,EADR,CACYC,EADZ,CACgBvzB,EADhB,CACoBwzB,EADpB,CAEEC,CAFF,CAEK/6D,CAFL,CAGEX,CAAC,CAAG,EAHN,CAIEzO,CAAC,CAAG,EAJN,CAMA,IAAMP,CAAC,CAAG,CAAJ,CAAO0pE,aAAa,CAAGtB,OAAO,CAAChoE,QAAR,CAAiBF,MAA9C,CAAsDF,CAAC,CAAG0pE,aAA1D,CAAyE1pE,CAAC,EAA1E,CAEE0M,CAAC,CAAG,CAAC1M,CAAC,CAAG,CAAL,EAAU0pE,aAFhB,CAGEzyB,EAAE,CAAGmxB,OAAO,CAAChoE,QAAR,CAAiBJ,CAAjB,CAHP,CAIEyqE,EAAE,CAAGrC,OAAO,CAAChoE,QAAR,CAAiBsM,CAAjB,CAJP,CAKE69D,EAAE,CAAG,KAAKX,cAAL,CAAqB3yB,EAArB,CALP,CAMEuzB,EAAE,CAAG,KAAKZ,cAAL,CAAqBa,EAArB,CANP,CAQOF,EAAE,EAAItC,IARb,EAQoBj5D,CAAC,CAACtO,IAAF,CAAQu2C,EAAR,CARpB,CASOszB,EAAE,EAAIvC,KATb,EASqBznE,CAAC,CAACG,IAAF,CAAQu2C,EAAR,CATrB,CAUO,CAACszB,EAAE,CAAGC,EAAN,IAActC,QAVrB,GAWIwC,CAAC,CAAG,CAAE,KAAKvhD,CAAL,CAAS,KAAK7kB,MAAL,CAAYszD,GAAZ,CAAiB3gB,EAAjB,CAAX,EAAqC,KAAK3yC,MAAL,CAAYszD,GAAZ,CAAiB6S,EAAE,CAACrnE,KAAH,GAAWwkE,QAAX,CAAqB3wB,EAArB,CAAjB,CAX7C,CAYItnC,CAAC,CAAGsnC,EAAE,CAAC0zB,WAAH,CAAgBF,EAAhB,CAAoBC,CAApB,CAZR,CAaI17D,CAAC,CAACtO,IAAF,CAAQiP,CAAR,CAbJ,CAcIpP,CAAC,CAACG,IAAF,CAAQiP,CAAR,CAdJ,EAmBiB,CAAZ,EAAAX,CAAC,CAAC9O,MA3BF,EA2BgBmqE,KAAK,CAAC3pE,IAAN,CAAY,GAAIqlE,SAAQ,CAACyC,OAAb,CAAsBx5D,CAAtB,EAA0B25D,mBAA1B,EAAZ,CA3BhB,CA4BY,CAAZ,EAAApoE,CAAC,CAACL,MA5BF,EA4BgBoqE,IAAI,CAAC5pE,IAAL,CAAW,GAAIqlE,SAAQ,CAACyC,OAAb,CAAsBjoE,CAAtB,EAA0BooE,mBAA1B,EAAX,CACtB,CACF,CA6MD,CA3MA5C,QAAQ,CAAC0C,MAAT,CAAkB,SAAU7oE,CAAV,CAAaC,CAAb,CAAgByJ,CAAhB,CAAmBhF,MAAnB,CAA2B2J,EAA3B,CAAgC,CAChD,KAAKrO,CAAL,CAASA,CADuC,CAEhD,KAAKC,CAAL,CAASA,CAFuC,CAGhD,KAAKyJ,CAAL,CAASA,CAHuC,CAIhD,KAAKhF,MAAL,CAAcA,MAAM,EAAI,GAAI5H,MAAK,CAAC4F,OAJc,CAKhD,KAAK2L,EAAL,CAAUA,EAAE,EAAI,GAAIvR,MAAK,CAACiD,OAC3B,CAqMD,CApMAomE,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0BsC,KAA1B,CAAkC,UAAW,CAC3C,MAAO,IAAI2iE,SAAQ,CAAC0C,MAAb,CAAqB,KAAK7oE,CAA1B,CAA6B,KAAKC,CAAlC,CAAqC,KAAKyJ,CAA1C,CAA6C,KAAKhF,MAAL,CAAYlB,KAAZ,EAA7C,CAAkE,KAAK6K,EAAL,CAAQ7K,KAAR,EAAlE,CACR,CAkMD,CAjMA2iE,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0BgD,GAA1B,CAAgC,SAAUoI,MAAV,CAAmB,CAIjD,MAHA,MAAKtM,CAAL,EAAUsM,MAAM,CAACtM,CAGjB,CAFA,KAAKC,CAAL,EAAUqM,MAAM,CAACrM,CAEjB,CADA,KAAKyJ,CAAL,EAAU4C,MAAM,CAAC5C,CACjB,CAAO,IACR,CA4LD,CA3LAy8D,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0B8mE,QAA1B,CAAqC,SAAU17D,MAAV,CAAmB,CAItD,MAHA,MAAKtM,CAAL,EAAUsM,MAAM,CAACtM,CAGjB,CAFA,KAAKC,CAAL,EAAUqM,MAAM,CAACrM,CAEjB,CADA,KAAKyJ,CAAL,EAAU4C,MAAM,CAAC5C,CACjB,CAAO,IACR,CAsLD,CArLAy8D,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0ByH,cAA1B,CAA2C,SAAUqiE,MAAV,CAAmB,CAI5D,MAHA,MAAKhrE,CAAL,EAAUgrE,MAGV,CAFA,KAAK/qE,CAAL,EAAU+qE,MAEV,CADA,KAAKthE,CAAL,EAAUshE,MACV,CAAO,IACR,CAgLD,CA/KA7E,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0BwO,KAA1B,CAAkC,SAAUpD,MAAV,CAAmB,CACnD,GAAItM,EAAC,CAAG,KAAKA,CAAb,CACEC,CAAC,CAAG,KAAKA,CADX,CAEEyJ,CAAC,CAAG,KAAKA,CAFX,CAQA,MAJA,MAAK1J,CAAL,CAASC,CAAC,CAAGqM,MAAM,CAAC5C,CAAX,CAAeA,CAAC,CAAG4C,MAAM,CAACrM,CAInC,CAHA,KAAKA,CAAL,CAASyJ,CAAC,CAAG4C,MAAM,CAACtM,CAAX,CAAeA,CAAC,CAAGsM,MAAM,CAAC5C,CAGnC,CAFA,KAAKA,CAAL,CAAS1J,CAAC,CAAGsM,MAAM,CAACrM,CAAX,CAAeA,CAAC,CAAGqM,MAAM,CAACtM,CAEnC,CAAO,IACR,CAqKD,CApKAmmE,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0B2L,SAA1B,CAAsC,UAAW,CAC/C,GAAIvM,OAAM,CAAGkK,IAAI,CAACmZ,IAAL,CAAW,KAAK3jB,CAAL,CAAS,KAAKA,CAAd,CAAkB,KAAKC,CAAL,CAAS,KAAKA,CAAhC,CAAoC,KAAKyJ,CAAL,CAAS,KAAKA,CAA7D,CAAb,CAMA,MAJA,MAAK1J,CAAL,EAAUM,MAIV,CAHA,KAAKL,CAAL,EAAUK,MAGV,CAFA,KAAKoJ,CAAL,EAAUpJ,MAEV,CAAO,IACR,CA4JD,CA3JA6lE,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0B82D,GAA1B,CAAgC,SAAU1rD,MAAV,CAAmB,CACjD,MAAO,MAAKtM,CAAL,CAASsM,MAAM,CAACtM,CAAhB,CAAoB,KAAKC,CAAL,CAASqM,MAAM,CAACrM,CAApC,CAAwC,KAAKyJ,CAAL,CAAS4C,MAAM,CAAC5C,CAChE,CAyJD,CAxJAy8D,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0B+pE,IAA1B,CAAiC,SAAUxqE,CAAV,CAAaqqE,CAAb,CAAiB,CAahD,MAZA,MAAK5mE,GAAL,CACEzD,CAAC,CAAC+C,KAAF,GAAUwkE,QAAV,CAAoB,IAApB,EAA2Br/D,cAA3B,CAA2CmiE,CAA3C,CADF,CAYA,CARA,KAAKpmE,MAAL,CAAYR,GAAZ,CACEzD,CAAC,CAACiE,MAAF,CAASlB,KAAT,GAAiB0wB,GAAjB,CAAsB,KAAKxvB,MAA3B,EAAoCiE,cAApC,CAAoDmiE,CAApD,CADF,CAQA,CAJA,KAAKz8D,EAAL,CAAQnK,GAAR,CACEzD,CAAC,CAAC4N,EAAF,CAAK7K,KAAL,GAAa0wB,GAAb,CAAkB,KAAK7lB,EAAvB,EAA4B1F,cAA5B,CAA4CmiE,CAA5C,CADF,CAIA,CAAO,IACR,CA0ID,CAzIA3E,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0B6pE,WAA1B,CAAwC,SAAUG,KAAV,CAAiBJ,CAAjB,CAAqB,CAC3D,MAAO,MAAKtnE,KAAL,GAAaynE,IAAb,CAAmBC,KAAnB,CAA0BJ,CAA1B,CACR,CAuID,CAtIA3E,QAAQ,CAAC0C,MAAT,CAAgB3nE,SAAhB,CAA0B0H,YAA1B,CAAyC,SAAWuS,CAAX,CAAe,CAEtD;AAFsD,GAIlDnb,EAAC,CAAG,KAAKA,CAJyC,CAItCC,CAAC,CAAG,KAAKA,CAJ6B,CAI1ByJ,CAAC,CAAG,KAAKA,CAJiB,CAMlDmnC,CAAC,CAAG11B,CAAC,CAAC6D,QAN4C,CAYtD,MAJA,MAAKhf,CAAL,CAAS6wC,CAAC,CAAC,CAAD,CAAD,CAAO7wC,CAAP,CAAW6wC,CAAC,CAAC,CAAD,CAAD,CAAO5wC,CAAlB,CAAsB4wC,CAAC,CAAC,CAAD,CAAD,CAAQnnC,CAA9B,CAAkCmnC,CAAC,CAAC,EAAD,CAI5C,CAHA,KAAK5wC,CAAL,CAAS4wC,CAAC,CAAC,CAAD,CAAD,CAAO7wC,CAAP,CAAW6wC,CAAC,CAAC,CAAD,CAAD,CAAO5wC,CAAlB,CAAsB4wC,CAAC,CAAC,CAAD,CAAD,CAAQnnC,CAA9B,CAAkCmnC,CAAC,CAAC,EAAD,CAG5C,CAFA,KAAKnnC,CAAL,CAASmnC,CAAC,CAAC,CAAD,CAAD,CAAO7wC,CAAP,CAAW6wC,CAAC,CAAC,CAAD,CAAD,CAAO5wC,CAAlB,CAAsB4wC,CAAC,CAAC,EAAD,CAAD,CAAQnnC,CAA9B,CAAkCmnC,CAAC,CAAC,EAAD,CAE5C,CAAO,IAER,CAwHD,CArHAs1B,QAAQ,CAACuC,IAAT,CAAgB,SAAUD,QAAV,CAAqB,CACnC,GAAIroE,EAAJ,CAAOupE,aAAP,CACEc,KAAK,CAAG,EADV,CAEEC,IAAI,CAAG,EAFT,CAOA,GAHA,KAAKjC,QAAL,CAAgB,EAGhB,CAFA,KAAKgC,KAAL,CAAa,KAAKC,IAAL,OAEb,CAAOjC,QAAQ,WAAY34D,MAAtB,EAAoD,CAApB,GAAA24D,QAAQ,CAACnoE,MAA9C,EAIA,IAFA,KAAK6qE,OAAL,CAAe1C,QAAQ,CAAC,CAAD,CAAR,CAAYjlE,KAAZ,EAEf,CAAMpD,CAAC,CAAG,CAAV,CAAaupE,aAAa,CAAGlB,QAAQ,CAACnoE,MAAtC,CAA8CF,CAAC,CAAGupE,aAAlD,CAAiEvpE,CAAC,EAAlE,CACE,KAAK+qE,OAAL,CAAab,YAAb,CAA2B7B,QAAQ,CAACroE,CAAD,CAAnC,CAAwC,KAAKqoE,QAA7C,CAAuD,KAAKA,QAA5D,CAAsEgC,KAAtE,CAA6EC,IAA7E,EAGkB,CAAf,CAAAD,KAAK,CAACnqE,MARX,GASE,KAAKmqE,KAAL,CAAa,GAAItE,SAAQ,CAACuC,IAAb,CAAmB+B,KAAnB,CATf,EAYmB,CAAd,CAAAC,IAAI,CAACpqE,MAZV,GAaE,KAAKoqE,IAAL,CAAY,GAAIvE,SAAQ,CAACuC,IAAb,CAAmBgC,IAAnB,CAbd,EAeD,CA8FD,CA7FAvE,QAAQ,CAACuC,IAAT,CAAc0C,QAAd,CAAyB,SAAU3C,QAAV,CAAqB,CAC5C,GAAIroE,EAAJ,CAAO0M,CAAP,CACA,IAAM1M,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGqoE,QAAQ,CAACnoE,MAA1B,CAAkCF,CAAC,EAAnC,CACE,IAAM0M,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAG27D,QAAQ,CAACnoE,MAA1B,CAAkCwM,CAAC,EAAnC,CACE,GAAK1M,CAAC,GAAK0M,CAAN,EAAW27D,QAAQ,CAACroE,CAAD,CAAR,CAAY8pE,YAAZ,CAA0BzB,QAAQ,CAAC37D,CAAD,CAAlC,IAA4Cu7D,IAA5D,CACE,SAIN,QACD,CAmFD,CAlFAlC,QAAQ,CAACuC,IAAT,CAAcxnE,SAAd,CAAwBgoE,KAAxB,CAAgC,SAAUT,QAAV,CAAqB,CACnD,GAAIroE,EAAJ,CAAOupE,aAAP,CACEc,KAAK,CAAG,EADV,CAEEC,IAAI,CAAG,EAFT,CAQA,IAJM,KAAKS,OAIX,GAHE,KAAKA,OAAL,CAAe1C,QAAQ,CAAC,CAAD,CAAR,CAAYjlE,KAAZ,EAGjB,EAAMpD,CAAC,CAAG,CAAV,CAAaupE,aAAa,CAAGlB,QAAQ,CAACnoE,MAAtC,CAA8CF,CAAC,CAAGupE,aAAlD,CAAiEvpE,CAAC,EAAlE,CACE,KAAK+qE,OAAL,CAAab,YAAb,CAA2B7B,QAAQ,CAACroE,CAAD,CAAnC,CAAwC,KAAKqoE,QAA7C,CAAuD,KAAKA,QAA5D,CAAsEgC,KAAtE,CAA6EC,IAA7E,EAGkB,CAAf,CAAAD,KAAK,CAACnqE,MAbwC,GAc5C,CAAC,KAAKmqE,KAdsC,GAc9B,KAAKA,KAAL,CAAa,GAAItE,SAAQ,CAACuC,IAdI,EAejD,KAAK+B,KAAL,CAAWvB,KAAX,CAAkBuB,KAAlB,CAfiD,EAkBhC,CAAd,CAAAC,IAAI,CAACpqE,MAlByC,GAmB5C,CAAC,KAAKoqE,IAnBsC,GAmB/B,KAAKA,IAAL,CAAY,GAAIvE,SAAQ,CAACuC,IAnBM,EAoBjD,KAAKgC,IAAL,CAAUxB,KAAV,CAAiBwB,IAAjB,CApBiD,CAsBpD,CA4DD,CA3DAvE,QAAQ,CAACuC,IAAT,CAAcxnE,SAAd,CAAwBioE,WAAxB,CAAsC,UAAW,CAC/C,GAAIV,SAAQ,CAAG,KAAKA,QAAL,CAAc9Y,KAAd,EAAf,CAGA,MAFK,MAAK8a,KAEV,GAFkBhC,QAAQ,CAAGA,QAAQ,CAACn+C,MAAT,CAAiB,KAAKmgD,KAAL,CAAWtB,WAAX,EAAjB,CAE7B,EADK,KAAKuB,IACV,GADiBjC,QAAQ,CAAGA,QAAQ,CAACn+C,MAAT,CAAiB,KAAKogD,IAAL,CAAUvB,WAAV,EAAjB,CAC5B,EAAOV,QACR,CAsDD,CArDAtC,QAAQ,CAACuC,IAAT,CAAcxnE,SAAd,CAAwBsC,KAAxB,CAAgC,UAAW,CACzC,GAAI4oD,KAAI,CAAG,GAAI+Z,SAAQ,CAACuC,IAAxB,CAOA,MALAtc,KAAI,CAAC+e,OAAL,CAAe,KAAKA,OAAL,CAAa3nE,KAAb,EAKf,CAJA4oD,IAAI,CAACqc,QAAL,CAAgB,KAAKA,QAAL,CAAcppE,GAAd,CAAmB,SAAUmpE,OAAV,CAAoB,CAAE,MAAOA,QAAO,CAAChlE,KAAR,EAAkB,CAAlE,CAIhB,CAHA4oD,IAAI,CAACqe,KAAL,CAAa,KAAKA,KAAL,EAAc,KAAKA,KAAL,CAAWjnE,KAAX,EAG3B,CAFA4oD,IAAI,CAACse,IAAL,CAAY,KAAKA,IAAL,EAAa,KAAKA,IAAL,CAAUlnE,KAAV,EAEzB,CAAO4oD,IACR,CA4CD,CA3CA+Z,QAAQ,CAACuC,IAAT,CAAcxnE,SAAd,CAAwB2xB,MAAxB,CAAiC,UAAW,CAC1C,GAAIzyB,EAAJ,CAAOupE,aAAP,CAAsB0B,IAAtB,CAEA,IAAMjrE,CAAC,CAAG,CAAJ,CAAOupE,aAAa,CAAG,KAAKlB,QAAL,CAAcnoE,MAA3C,CAAmDF,CAAC,CAAGupE,aAAvD,CAAsEvpE,CAAC,EAAvE,CACE,KAAKqoE,QAAL,CAAcroE,CAAd,EAAiB2pE,IAAjB,GAWF,MARA,MAAKoB,OAAL,CAAapB,IAAb,EAQA,CAPK,KAAKU,KAOV,EAPkB,KAAKA,KAAL,CAAW53C,MAAX,EAOlB,CANK,KAAK63C,IAMV,EANiB,KAAKA,IAAL,CAAU73C,MAAV,EAMjB,CAJAw4C,IAAI,CAAG,KAAKZ,KAIZ,CAHA,KAAKA,KAAL,CAAa,KAAKC,IAGlB,CAFA,KAAKA,IAAL,CAAYW,IAEZ,CAAO,IACR,CA2BD,CA1BAlF,QAAQ,CAACuC,IAAT,CAAcxnE,SAAd,CAAwBoqE,YAAxB,CAAuC,SAAU7C,QAAV,CAAqB,CAC1D,GAAIroE,EAAJ,CAAOupE,aAAP,CACEc,KADF,CACSC,IADT,CAGA,GAAK,CAAC,KAAKS,OAAX,CAAqB,MAAO1C,SAAQ,CAAC9Y,KAAT,EAAP,CAIrB,IAFA8a,KAAK,CAAG,EAAR,CAAYC,IAAI,CAAG,EAAnB,EAEMtqE,CAAC,CAAG,CAAJ,CAAOupE,aAAa,CAAGlB,QAAQ,CAACnoE,MAFtC,CAEA,CAA8CF,CAAC,CAAGupE,aAAlD,CAAiEvpE,CAAC,EAAlE,CACE,KAAK+qE,OAAL,CAAab,YAAb,CAA2B7B,QAAQ,CAACroE,CAAD,CAAnC,CAAwCqqE,KAAxC,CAA+CC,IAA/C,CAAqDD,KAArD,CAA4DC,IAA5D,EAOF,MAJK,MAAKD,KAIV,GAJkBA,KAAK,CAAG,KAAKA,KAAL,CAAWa,YAAX,CAAyBb,KAAzB,CAI1B,EAHiBC,IAGjB,CAHK,KAAKA,IAGV,CAHwB,KAAKA,IAAL,CAAUY,YAAV,CAAwBZ,IAAxB,CAGxB,CAFY,EAEZ,CAAOD,KAAK,CAACngD,MAAN,CAAcogD,IAAd,CACR,CASD,CAPAvE,QAAQ,CAACuC,IAAT,CAAcxnE,SAAd,CAAwB+nE,MAAxB,CAAiC,SAAU7c,IAAV,CAAiB,CAChD,KAAKqc,QAAL,CAAgBrc,IAAI,CAACkf,YAAL,CAAmB,KAAK7C,QAAxB,CADgC,CAE3C,KAAKgC,KAFsC,EAE9B,KAAKA,KAAL,CAAWxB,MAAX,CAAmB7c,IAAnB,CAF8B,CAG3C,KAAKse,IAHsC,EAG/B,KAAKA,IAAL,CAAUzB,MAAV,CAAkB7c,IAAlB,CAClB,CAGD,CAAO+Z,QACR,C;;;;;;ACnjBH,+C;;;;;;ACAA,6C;;;;;;GCAMxqE,SAAQ,CAAGN,mBAAO,CAAC,CAAD,CAAP,CAAkCM,Q,CAC7CmB,KAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACfmkB,UAAU,CAAG1iB,KAAK,CAACupE,oB,CAEzBtpE,MAAM,CAACC,OAAP,CAAiB,SAAUuuE,IAAV,CAAgB,IAC5B/E,KAAI,OADwB,CAG5BgF,gBAAgB,CAAG,SAASx0D,MAAT,CAAiB,IACnC4vD,WAAU,CAAG,GAAIpnD,WADkB,CAEnC/hB,QAAQ,CAAGmpE,UAAU,CAACxkD,KAAX,CAAiBpL,MAAjB,CAFwB,CAGnClZ,QAAQ,CAAG,GAAIhB,MAAK,CAACyB,iBAHc,CAI7Be,IAAI,CAAG,GAAIxC,MAAK,CAACyC,IAAV,CAAe9B,QAAQ,CAACA,QAAxB,CAAkCK,QAAlC,CAJsB,CAK7ByoE,IAAI,CAAG,GAAI5qE,SALkB,CAOjC,MADA4qE,KAAI,CAAC7oE,KAAL,CAAa4B,IACb,CAAOinE,IACb,CAX+B,CAa5B1pD,UAAU,CAAG,SAAS7F,MAAT,CAAiB,CACjC,GAAIuvD,KAAI,CAAGiF,gBAAgB,CAACx0D,MAAD,CAA3B,CACAwvD,IAAI,CAAG,IAAKnrE,mBAAO,CAAC,EAAD,CAAP,CAAiC4rE,mBAAtC,EAA2DV,IAA3D,CAF0B,CAGjCgF,IAAI,CAACrE,WAAL,CAAiB,CAACH,MAAM,CAAC,SAAR,CAAmB5kB,OAAO,CAAE,aAA5B,CAAjB,CACA,CAjB+B,CAmB5B2lB,SAAS,CAAG,SAAS9wD,MAAT,CAAiB,CAChC,GAAIwvD,IAAJ,CAAU,IACLiF,MAAK,CAAGD,gBAAgB,CAACx0D,MAAD,CADnB,CAELiC,MAAM,CAAGutD,IAAI,CAACsB,SAAL,CAAe2D,KAAf,CAFJ,CAGLtjD,IAAI,CAAGlP,MAAM,CAACtb,gBAAP,GAA0B6V,MAA1B,EAHF,CAIT+3D,IAAI,CAACrE,WAAL,CAAiB,CAACH,MAAM,CAAE,QAAT,CAAmB/vD,MAAM,CAAEmR,IAA3B,CAAjB,CACA,CACD,CA1B+B,CA4B5B6/C,QAAQ,CAAG,SAAShxD,MAAT,CAAiB,CAC/B,GAAIwvD,IAAJ,CAAU,IACLiF,MAAK,CAAGD,gBAAgB,CAACx0D,MAAD,CADnB,CAELiC,MAAM,CAAGutD,IAAI,CAACwB,QAAL,CAAcyD,KAAd,CAFJ,CAGLtjD,IAAI,CAAGlP,MAAM,CAACtb,gBAAP,GAA0B6V,MAA1B,EAHF,CAIT+3D,IAAI,CAACrE,WAAL,CAAiB,CAACH,MAAM,CAAE,QAAT,CAAmB/vD,MAAM,CAAEmR,IAA3B,CAAjB,CACA,CACD,CAnC+B,CAqC5BnB,KAAK,CAAG,SAAShQ,MAAT,CAAiB,CAC5B,GAAIwvD,IAAJ,CAAU,IACLiF,MAAK,CAAGD,gBAAgB,CAACx0D,MAAD,CADnB,CAELiC,MAAM,CAAGutD,IAAI,CAACx/C,KAAL,CAAWykD,KAAX,CAFJ,CAGLtjD,IAAI,CAAGlP,MAAM,CAACtb,gBAAP,GAA0B6V,MAA1B,EAHF,CAIT+3D,IAAI,CAACrE,WAAL,CAAiB,CAACH,MAAM,CAAE,QAAT,CAAmB/vD,MAAM,CAAEmR,IAA3B,CAAjB,CACA,CACD,CA5C+B,CA8ChCojD,IAAI,CAAC7R,gBAAL,CAAsB,SAAtB,CAAgC,SAAUoN,EAAV,CAAa,CACzC,OAAQA,EAAE,CAACvyD,IAAH,CAAQwyD,MAAhB,EACI,IAAK,YAAL,CACOlqD,UAAU,CAACiqD,EAAE,CAACvyD,IAAH,CAAQyC,MAAT,CADjB,CAEO,MACP,IAAK,WAAL,CACC8wD,SAAS,CAAChB,EAAE,CAACvyD,IAAH,CAAQyC,MAAT,CADV,CAEO,MACP,IAAK,UAAL,CACCgxD,QAAQ,CAAClB,EAAE,CAACvyD,IAAH,CAAQyC,MAAT,CADT,CAEO,MACP,IAAK,OAAL,CACCgQ,KAAK,CAAC8/C,EAAE,CAACvyD,IAAH,CAAQyC,MAAT,CADN,CAEO,MACP,QACC,KAAM,iCAAN,CAdL,CAgBH,CAjBD,CAqBA,C;;;;;;GCvEKla,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACf8qE,QAAQ,CAAG9qE,mBAAO,CAAC,EAAD,CAAP,CAA2ByB,KAA3B,C,CACXnB,QAAQ,CAAGN,mBAAO,CAAC,CAAD,CAAP,CAAkCM,Q,CAC7CS,WAAW,CAAGf,mBAAO,CAAC,EAAD,CAAP,CAA0Be,W,CAExC6qE,mBAAmB,CAAG,SAAUX,MAAV,CAAkB,CAC5C;AACA,GAAIC,KAAJ,CACID,MAAM,EAAIA,MAAM,CAAClpE,UAHuB,GAI1CmpE,IAAI,CAAGD,MAJmC,EAK5C,GAAIoF,QAAJ,CAEA,KAAKC,WAAL,CAAmBrF,MAAM,EAAI,CACvBA,MAAM,EAAIA,MAAM,CAAClpE,UADM,GAE5BmpE,IAAI,CAAGD,MAFqB,EAG3BoF,OAAO,OACR,CAX2C,CAa5C,KAAKhE,MAAL,CAAcV,GAAG,EAAI,CACpB0E,OAAO,CAAG1E,GACV,CAf2C,CAiB5C,GAAM4E,WAAU,CAAG/D,aAAa,EAAI,CACnC,GAAItB,IAAI,EAAIA,IAAI,CAAC7oE,KAAb,EAAsBmqE,aAAtB,EAAuCA,aAAa,CAACnqE,KAAzD,CAAgE,CACxDguE,OAAO,SADiD,GAE1DA,OAAO,CAAG,GAAIvF,SAAJ,CAAaI,IAAI,CAAC7oE,KAAlB,CAFgD,EAG5D,GAAMmuE,SAAQ,CAAG,GAAI1F,SAAJ,CAAa0B,aAAa,CAACnqE,KAA3B,CAAjB,CACA,MAAOmuE,SACV,CAED,CARD,CAUA,KAAK/D,SAAL,CAAiBD,aAAa,EAAI,CACjC,GAAMgE,SAAQ,CAAGD,UAAU,CAAC/D,aAAD,CAA3B,CADiC,MAE7B6D,QAAO,EAAIG,QAFkB,CAGxBH,OAAO,CAAC5D,SAAR,CAAkB+D,QAAlB,CAHwB,OAMjC,CAjC2C,CAmC5C,KAAK7D,QAAL,CAAgBH,aAAa,EAAI,CAChC,GAAMgE,SAAQ,CAAGD,UAAU,CAAC/D,aAAD,CAA3B,CADgC,MAE5B6D,QAAO,EAAIG,QAFiB,CAGxBH,OAAO,CAAC1D,QAAR,CAAiB6D,QAAjB,CAHwB,OAMhC,CAzC2C,CA2C5C,KAAK7kD,KAAL,CAAa6gD,aAAa,EAAI,CAC7B,GAAMgE,SAAQ,CAAGD,UAAU,CAAC/D,aAAD,CAA3B,CAD6B,MAEzB6D,QAAO,EAAIG,QAFc,CAGrBH,OAAO,CAAC1kD,KAAR,CAAc6kD,QAAd,CAHqB,OAM7B,CACF,C,CAED7uE,OAAO,CAACiqE,mBAAR,CAA8BA,mB;;;;;;GCzDxBnqE,MAAK,CAAGzB,mBAAO,CAAC,CAAD,C,CACf8qE,QAAQ,CAAG9qE,mBAAO,CAAC,EAAD,CAAP,CAA0ByB,KAA1B,C,CACXjB,QAAQ,CAAGR,mBAAO,CAAC,EAAD,CAAP,CAAiCQ,Q,CAU5CQ,WAAW,CAAG,SAAUiqE,MAAV,CAAkB,CACpC,GAAIC,KAAJ,CACID,MAAM,EAAIA,MAAM,CAAC/lD,UAFe,GAGnCgmD,IAAI,CAAGD,MAH4B,KAI9BwF,SAAQ,GAJsB,CAOpC,KAAKC,WAAL,CAAmBzF,MAAM,EAAI,CACxBA,MAAM,EAAIA,MAAM,CAAC/lD,UADO,GAE3BgmD,IAAI,CAAGD,MAFoB,EAG5BoF,OAAO,OACP,CAXmC,CAapC,KAAKxtD,WAAL,CAAmB,IACXqoD,IAd4B,IAiB9ByF,oBAAmB,CAAG,IACpBnnD,KAAK,EAAI,IACTvlB,KAAI,CAAGulB,KAAK,CAAClG,OAAN,EADE,CAETd,KAAK,CAAGgH,KAAK,CAACnG,QAAN,EAFC,CAGf,GAAIpf,IAAJ,CAAU,IACH0nE,IAAG,CAAG,GAAIb,SAAJ,CAAa7mE,IAAI,CAAC7B,QAAL,CAAc+F,KAAd,GAAsBoT,WAAtB,CAAkCtX,IAAI,CAAC+M,MAAvC,CAAb,CADH,CAEH4/D,KAAK,CAAG,EAFL,CAGTA,KAAK,CAACjF,GAAN,CAAYA,GAHH,CAITiF,KAAK,CAACpuD,KAAN,CAAcA,KAJL,CAKLve,IAAI,CAACxB,QALA,GAMRmuE,KAAK,CAACnuE,QAAN,CAAiBwB,IAAI,CAACxB,QAAL,CAAc0F,KAAd,EANT,EAOTsoE,QAAQ,CAAChrE,IAAT,CAAcmrE,KAAd,CACA,CACD,CA9BkC,CAiC9BL,UAAU,CAAG/D,aAAa,EAAI,CACnC,GAAItB,IAAI,EAAIsB,aAAR,EAAyBA,aAAa,CAACnqE,KAA3C,CAAkD,CACvB,CAAnB,EAAAouE,QAAQ,CAACxrE,MADiC,EAE7CimE,IAAI,CAAC5/C,YAAL,CAAkBqlD,mBAAmB,EAArC,CAF6C,CAI/C,GAAMH,SAAQ,CAAG,GAAI1F,SAAJ,CAAa0B,aAAa,CAACnqE,KAA3B,CAAjB,CACA,MAAOmuE,SACT,CAED,CA1CmC,CA4CpC,KAAK/D,SAAL,CAAiBD,aAAa,EAAI,CACjC,GAAMgE,SAAQ,CAAGD,UAAU,CAAC/D,aAAD,CAA3B,CACA,GAAuB,CAAlB,CAAAiE,QAAQ,CAACxrE,MAAV,EAAyBurE,QAA7B,CAAuC,CAExC,OADMK,SAAQ,CAAG,IAAK7wE,mBAAO,CAAC,EAAD,CAAP,CAAiCQ,QAAtC,CACjB,CAASuE,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG0rE,QAAQ,CAACxrE,MAA7B,CAAqCF,CAAC,EAAtC,CAA0C,IACnCsrE,SAAO,CAAGI,QAAQ,CAAC1rE,CAAD,CADiB,CAEhC0nE,SAAS,CAAG4D,QAAO,CAAC1E,GAAR,CAAYc,SAAZ,CAAsB+D,QAAtB,CAFoB,CAGhCvsE,IAAI,CAAGwoE,SAAS,CAACL,MAAV,EAHyB,CAItC,GAAInoE,IAAI,EAAIA,IAAI,CAAC7B,QAAb,EAA0D,CAAhC,CAAA6B,IAAI,CAAC7B,QAAL,CAAc+C,QAAd,CAAuBF,MAArD,CAAkE,CAC7DorE,QAAO,CAAC5tE,QADqD,GAEhEwB,IAAI,CAACxB,QAAL,CAAgB4tE,QAAO,CAAC5tE,QAFwC,CAGhEwB,IAAI,CAACxB,QAAL,CAAcY,IAAd,CAAqB5B,KAAK,CAAC6B,UAHqC,CAIhEW,IAAI,CAACxB,QAAL,CAAcquE,cAAd,CAA+B,IAJiC,EAMjE,GAAMtnD,MAAK,CAAGqnD,QAAQ,CAACxlD,cAAT,CAAwBpnB,IAAxB,CAA8Bc,CAAC,CAAC,CAAhC,CAAd,CACAykB,KAAK,CAAC1G,QAAN,CAAeutD,QAAO,CAAC7tD,KAAvB,CACA,CACJ,CACE,GAAMkqD,OAAM,CAAG,GAAI1rE,YAAJ,CAAgB6vE,QAAhB,CAAf,CACA,MAAOnE,OACR,CAGD,CAEF,C,CAED/qE,OAAO,CAACX,WAAR,CAAsBA,W","file":"zinc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, function() {\nreturn "," \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 = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","require(\"url-polyfill\");\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = \"1.0.12\";\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Lines = require('./primitives/lines').Lines;\n this.TextureArray = require('./texture/textureArray').TextureArray;\n this.TextureSlides = require('./primitives/textureSlides').TextureSlides;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n /**\n * Create the mesh for rendering\n * \n * @param {THREE.Geomtry} geometryIn - Geometry to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the geometry.\n * @param {Object} options - Provide various options\n * @param {THREE.Color} options.colour - colour to be set for the geometry\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the geometry is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n * @param {Number} options.opacity - Opacity to be set for the geometry\n */\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (this.geometry && this.morph && (geometryIn != undefined))\n\t\t\treturn;\n\t\t// First copy the geometry\n\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\n\t\tlet isTransparent = false;\n\t\tif (1.0 > options.opacity)\n\t\t\t isTransparent = true;\n\n\t\tlet material = undefined;\n\t\tif (geometry._video === undefined) {\n const morphTargets = options.localTimeEnabled || options.localMorphColour;\n\t\t\tif (materialIn) {\n\t\t\t\tmaterial = materialIn;\n\t\t\t\tmaterial.morphTargets = morphTargets;\n\t\t\t\tmaterial.morphNormals = options.localTimeEnabled;\n\t\t\t} else {\n\t\t\t\tif (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : morphTargets,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : morphTargets,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\tvertexColors : THREE.VertexColors,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t//material = PhongToToon(material);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n\t\t\t\tmaterial.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n\t\t\t}\n\t\t} else {\n\t\t\tlet videoTexture = geometry._video.createCanvasVideoTexture();\n\t\t\tmaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\tcolor : new THREE.Color(1, 1, 1),\n\t\t\t\ttransparent : isTransparent,\n\t\t\t\topacity : options.opacity,\n\t\t\t\tmap : videoTexture,\n\t\t\t\tside : THREE.DoubleSide\n\t\t\t});\n\t\t\tthis.videoHandler = geometry._video;\n\t\t}\n\t\tlet mesh = new THREE.Mesh(geometry, material); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\n /**\n * Calculate the UV for texture rendering.\n */\n\tthis.calculateUVs = () => {\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\t\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('../three/Geometry').Geometry;\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"pr\" + uniqueiId++;\n}\n\n/**\n * Provides the base object for other primitive types.\n * This class contains multiple base methods.\n * \n * @class\n * @author Alan Wu\n * @return {ZincObject}\n */\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n this.secondaryMesh = undefined;\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = {};\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerUpdateRequired = true;\n this.closestVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this._vertex = new THREE.Vector3();\n this.anatomicalId = undefined;\n this.region = undefined;\n this.animationClip = undefined;\n this.uuid = getUniqueId();\n}\n\n/**\n * Set the duration of the animation of this object.\n * \n * @param {Number} durationIn - Duration of the animation.\n */\nZincObject.prototype.setDuration = function(durationIn) {\n this.duration = durationIn;\n if (this.clipAction) {\n this.clipAction.setDuration(this.duration);\n }\n}\n\n/**\n * Get the duration of the animation of this object.\n * \n * @return {Number}\n */\nZincObject.prototype.getDuration = function() {\n return this.duration;\n}\n\n/**\n * Set the region this object belongs to.\n * \n * @param {Region} region\n */\nZincObject.prototype.setRegion = function(region) {\n this.region = region;\n}\n\n/**\n * Get the region this object belongs to.\n * \n * @return {Region}\n */\nZincObject.prototype.getRegion = function() {\n return this.region;\n}\n\n/**\n * Convert a {THREE.Geometry} into a {THREE.BufferGeometry}.\n */\nZincObject.prototype.toBufferGeometry = function(geometryIn, options) {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && !geometryIn.morphNormalsReady && \n (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toIndexedBufferGeometry();\n if (options.localMorphColour) {\n require(\"../utilities\").copyMorphColorsToIndexedBufferGeometry(geometryIn, geometry);\n }\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\n/**\n * Handle transparent mesh, create a clone for backside rendering if it is\n * transparent.\n */\nZincObject.prototype.checkAndCreateTransparentMesh = function() {\n if (this.isGeometry && this.morph.material && this.morph.material.transparent) {\n if (!this.secondaryMesh) {\n let secondaryMaterial = this.morph.material.clone();\n secondaryMaterial.side = THREE.FrontSide;\n this.secondaryMesh = new THREE.Mesh(this.morph.geometry, secondaryMaterial);\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n this.secondaryMesh.userData = this;\n this.secondaryMesh.name = this.groupName;\n }\n this.morph.material.side = THREE.BackSide;\n this.morph.material.needsUpdate = true;\n this.morph.add(this.secondaryMesh);\n this.animationGroup.add(this.secondaryMesh);\n }\n}\n\n/**\n * Handle transparent mesh, remove a clone for backside rendering if it is\n * transparent.\n */\nZincObject.prototype.checkAndRemoveTransparentMesh = function() {\n if (this.isGeometry && this.secondaryMesh) {\n this.morph.remove(this.secondaryMesh);\n this.animationGroup.uncache(this.secondaryMesh);\n this.animationGroup.remove(this.secondaryMesh);\n }\n this.morph.material.side = THREE.DoubleSide;\n}\n\n/**\n * Set the mesh function for zincObject.\n * \n * @param {THREE.Mesh} mesh - Mesh to be set for this zinc object.\n * @param {Boolean} localTimeEnabled - A flag to indicate either the mesh is\n * time dependent.\n * @param {Boolean} localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\nZincObject.prototype.setMesh = function(mesh, localTimeEnabled, localMorphColour) {\n this.animationGroup = new THREE.AnimationObjectGroup(mesh);\n this.mixer = new THREE.AnimationMixer(this.animationGroup);\n this.geometry = mesh.geometry;\n this.clipAction = undefined;\n if (this.geometry && this.geometry.morphAttributes) {\n let morphAttribute = this.geometry.morphAttributes.position;\n if (!morphAttribute) {\n morphAttribute = this.geometry.morphAttributes.color ?\n this.geometry.morphAttributes.color :\n this.geometry.morphAttributes.normal;\n }\n if (morphAttribute) {\n this.animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n morphAttribute, 10, true);\n if (this.animationClip && (this.animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(this.animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n this.morph = mesh;\n this.morph.userData = this;\n this.morph.matrixAutoUpdate = false;\n this.checkAndCreateTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n } else {\n if (this.morphColour) {\n this.geometry.setAttribute('morphTarget0', this.geometry.getAttribute( 'position' ) );\n this.geometry.setAttribute('morphTarget1', this.geometry.getAttribute( 'position' ) );\n }\n }\n this.boundingBoxUpdateRequired = true;\n}\n\n/**\n * Set the name for this ZincObject.\n * \n * @param {String} groupNameIn - Name to be set.\n */\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n if (this.morph) {\n this.morph.name = this.groupName;\n }\n if (this.secondaryMesh) {\n this.secondaryMesh.name = this.groupName;\n }\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\nconst updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry && targetGeometry.morphAttributes &&\n targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.isTimeVarying()) {\n this.mixer.update( 0.0 );\n }\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n updateMorphColorAttribute(this.geometry, this.morph);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.morph.visible;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n if (this.morph.visible !== visible) {\n this.morph.visible = visible;\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this.morph.material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n let transparentChanged = material.transparent == isTransparent ? false : true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n if (transparentChanged)\n if (isTransparent)\n this.checkAndCreateTransparentMesh();\n else\n this.checkAndRemoveTransparentMesh();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.opacity = alpha;\n}\n\n/**\n * The rendering will be culled if it is outside of the frustrum\n * when this flag is set to true, it should be set to false if\n * morphing is enabled.\n * \n * @param {Boolean} flag - Set frustrum culling on/off based on this flag.\n */\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\n/**\n * Set rather a zinc object should be displayed using per vertex colour or\n * not.\n * \n * @param {Boolean} vertexColors - Set display with vertex color on/off.\n */\nZincObject.prototype.setVertexColors = function(vertexColors) {\n this.morph.material.vertexColors = vertexColors;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.vertexColors = vertexColors;\n}\n\n/**\n * Get the colour of the mesh.\n * \n * @return {THREE.Color}\n */\nZincObject.prototype.getColour = function() {\n if (this.morph && this.morph.material)\n return this.morph.material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the mesh.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this.morph.material.color = colour;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n}\n\n/**\n * Get the colour of the mesh in hex string form.\n * \n * @return {String}\n */\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour) {\n if (this.morph && this.morph.material && this.morph.material.color)\n return this.morph.material.color.getHexString();\n }\n return undefined;\n}\n\n/**\n * Set the colour of the mesh using hex in string form.\n * \n * @param {String} hex - The colour value in hex form.\n */\nZincObject.prototype.setColourHex = function(hex) {\n this.morph.material.color.setHex(hex);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color.setHex(hex);\n}\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this.morph.material = material;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material) {\n this.secondaryMesh.material.dispose();\n this.secondaryMesh.material = material.clone()\n this.secondaryMesh.material.side = THREE.FrontSide;\n }\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n * \n * @return {Number} - integer index in the array\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n if (this.morph) {\n let position = this.morph.geometry.attributes.position;\n let boundingBox = new THREE.Box3().setFromBufferAttribute(position);\n let center = new THREE.Vector3();\n boundingBox.getCenter(center);\n if (position && boundingBox) {\n let distance = -1;\n let currentDistance = 0;\n let current = new THREE.Vector3();\n for (let i = 0; i < position.count; i++) {\n current.fromArray(position.array, i * 3);\n currentDistance = current.distanceTo(center);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n * \n * @return {THREE.Vector3}\n */\nZincObject.prototype.getClosestVertex = function(applyMatrixWorld) {\n let position = new THREE.Vector3();\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = this.morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._vertex.fromArray(\n attributes.position[i].array, this.closestVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found) {\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n }\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.closestVertexIndex * 3);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.morph && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = undefined;\n if (this.morph.geometry)\n attributes = this.morph.geometry.morphAttributes;\n let found = false;\n if (influences && attributes && attributes.position) {\n let min = new THREE.Vector3();\n let max = new THREE.Vector3();\n let box = new THREE.Box3();\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n box.setFromArray(attributes.position[i].array);\n min.add(box.min.multiplyScalar(influences[i]));\n max.add(box.max.multiplyScalar(influences[i]));\n }\n }\n if (found)\n this.cachedBoundingBox.set(min, max);\n }\n if (!found) {\n this.cachedBoundingBox.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n }\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n}\n\n/**\n * Clear this geometry and free the memory.\n */\nZincObject.prototype.dispose = function() {\n if (this.morph && this.morph.geometry)\n this.morph.geometry.dispose();\n if (this.morph && this.morph.material)\n this.morph.material.dispose();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.dispose();\n if (this.geometry)\n this.geometry.dispose();\n this.animationGroup = undefined;\n this.mixer = undefined;\n this.morph = undefined;\n this.clipAction = undefined;\n this.groupName = undefined;\n}\n\n/**\n * Update the marker's position and size based on current viewport. \n */\nZincObject.prototype.updateMarker = function(playAnimation, options) {\n if ((playAnimation == false) &&\n (options && options.displayMarkers))\n {\n if (this.groupName) {\n if (!this.marker) {\n this.marker = new (require(\"./marker\").Marker)(this);\n this.markerUpdateRequired = true;\n }\n if (this.markerUpdateRequired) {\n let position = this.getClosestVertex(false);\n if (position) {\n this.marker.setPosition(position.x, position.y, position.z);\n this.markerUpdateRequired = false;\n }\n }\n if (options && options.camera && options.markerDepths) {\n options.markerDepths.push(\n this.marker.updateNDC(options.camera.cameraObject));\n }\n if (!this.marker.isEnabled()) {\n this.marker.enable();\n this.morph.add(this.marker.morph);\n }\n }\n } else {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.disable();\n this.morph.remove(this.marker.morph);\n }\n this.markerUpdateRequired = true;\n }\n}\n\nZincObject.prototype.processMarkerVisual = function(min, max) {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.updateVisual(min, max);\n }\n}\n\nZincObject.prototype.initiateMorphColor = function() {\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true))) {\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n}\n\nZincObject.prototype.setRenderOrder = function(renderOrder) {\n if (this.morph && (renderOrder !== undefined)) {\n this.morph.renderOrder = renderOrder;\n if (this.secondaryMesh)\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n }\n}\n\n/**\n * Get the windows coordinates.\n * \n * @return {Object} - position and rather the closest vertex is on screen.\n */\nZincObject.prototype.getClosestVertexDOMElementCoords = function(scene) {\n if (scene && scene.camera) {\n let inView = true;\n const position = this.getClosestVertex(true);\n position.project(scene.camera);\n position.z = Math.min(Math.max(position.z, 0), 1);\n if (position.x > 1 || position.x < -1 || position.y > 1 || position.y < -1) {\n inView = false;\n }\n scene.getZincCameraControls().getRelativeCoordsFromNDC(position.x, position.y, position);\n return {position, inView};\n } else {\n return undefined;\n }\n}\n\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation, options) {\n if (playAnimation == true)\n {\n if ((this.clipAction) && this.isTimeVarying()) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n if (delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true)))\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\nexports.ZincObject = ZincObject;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n this.normals = [];\n this.uvs = [];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\tthis.morphNormalsReady = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst 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\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n return vertices;\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\tlet vertexNormals = tmpGeo.computeVertexNormals();\n\n if (vertexNormals && vertexNormals.length > 0) {\n this.morphTargets[i].normals = new Array( this.vertices.length );\n\n for ( let v = 0; v < vertexNormals.length; v ++ ) {\n \n this.morphTargets[i].normals[ v ] = vertexNormals[v].clone();\n \n }\n }\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n this.morphNormalsReady = true;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\n\tcomputeGroups( ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\treturn groups;\n\n\t},\n\n\ttoBufferGeometry: function () {\n\n\t\tconst geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tbuffergeometry.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n toIndexedBufferGeometry: function () {\n\n\t\t//const geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( this.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( this.vertices ) );\n\n\t\tif ( this.normals.length > 0 ) {\n\t\t\tconst normals = new Float32Array( this.normals.length );\n let buffer = new BufferAttribute( normals, 3 ).copyArray( this.normals );\n\t\t\tbuffergeometry.setAttribute( 'normal', buffer);\n\t\t}\n if ( this.uvs.length > 0 && this.uvs[0].length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( this.uvs[0].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyArray( this.uvs[0] ) );\n\t\t}\n\n\t\tif ( this.uvs.length > 1 && this.uvs[1].length > 0 ) {\n\t\t\tconst uvs2 = new Float32Array( this.uvs[1].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyArray( this.uvs[1] ) );\n\t\t}\n\n if ( this.colors.length > 0) {\n\n const colorArray = [];\n for (let i = 0 ; i < this.colors.length; i++) {\n colorArray.push(new Color( this.colors[ i ] ));\n }\n const colors = new Float32Array( colorArray.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( colorArray ) );\n\n } else {\n\n const colorsArray = new Float32Array( this.vertices.length * 3 );\n for (let i = 0; i < this.vertices.length * 3; i++) {\n colorsArray[i] = 1.0;\n }\n buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ) );\n \n }\n\n if (this.faces.length > 0) {\n\n let colors = [];\n\n let indices = [];\n\n for (let i = 0 ; i < this.faces.length; i++) {\n\n indices.push(this.faces[i].a, this.faces[i].b, this.faces[i].c);\n\n const vertexColors = this.faces[i].vertexColors;\n \n if ( vertexColors.length === 3 ) {\n \n colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n \n } else {\n \n const color = this.faces[i].color;\n \n colors.push( color, color, color );\n \n }\n\n }\n\n // if ( colors.length > 0 ) {\n\n// const colorsArray = new Float32Array( colors.length * 3 );\n// buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ).copyColorsArray( colors ) );\n \n// }\n\n buffergeometry.setIndex( indices );\n\n buffergeometry.groups = this.computeGroups();\n\n }\n\n\t\t// morphs\n\n if (this.morphTargets.length > 0) {\n\n\t\t\tconst array = [];\n const normalsArray = [];\n\n\t\t\tfor ( let i = 0, l = this.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = this.morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.vertices.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.vertices ) );\n\n if (morphTarget.normals) {\n\n\n const attribute = new Float32BufferAttribute( morphTarget.normals.length * 3, 3 );\n attribute.name = morphTarget.name;\n\n normalsArray.push( attribute.copyVector3sArray( morphTarget.normals ) );\n \n }\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes.position = array;\n buffergeometry.morphAttributes.normal = normalsArray;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( this.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( this.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( this.skinIndices ) );\n\n\t\t}\n\n\t\tif ( this.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( this.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( this.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = this.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = this.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nGeometry.createBufferGeometryFromObject = function ( object ) {\n\n\tlet buffergeometry = new BufferGeometry();\n\n\tconst geometry = object.geometry;\n\n\tif ( object.isPoints || object.isLine ) {\n\n\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\tbuffergeometry.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\tbuffergeometry.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\tbuffergeometry.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t} else if ( object.isMesh ) {\n\n\t\tbuffergeometry = geometry.toBufferGeometry();\n\n\t}\n\n\treturn buffergeometry;\n\n};\n\nclass DirectGeometry {\n\n\tconstructor() {\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\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\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;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Face3, Geometry };\n","const THREE = require('three');\n\nfunction resolveURL(url) {\n\tlet actualURL = url;\n\tconst prefix = (require(\"./zinc\").modelPrefix);\n\t\n\tif (prefix) {\n\t\tif (prefix[prefix.length -1] != '/')\n\t\t\tprefix = prefix + '/';\n\t\tconst r = new RegExp('^(?:[a-z]+:)?//', 'i');\n\t\tif (!r.test(url)) {\n\t\t\tactualURL = prefix + url;\n\t\t}\n\t}\n\t\n\treturn actualURL;\n}\n\n//Convenient function\nfunction loadExternalFile(url, data, callback, errorCallback) {\n // Set up an asynchronous request\n const request = new XMLHttpRequest();\n request.open('GET', resolveURL(url), true);\n\n // Hook the event that gets called as the request progresses\n request.onreadystatechange = () => {\n // If the request is \"DONE\" (completed or failed)\n if (request.readyState == 4) {\n // If we got HTTP status 200 (OK)\n if (request.status == 200) {\n callback(request.responseText, data)\n } else { // Failed\n errorCallback(url);\n }\n }\n };\n\n request.send(null); \n}\n\nfunction loadExternalFiles(urls, callback, errorCallback) {\n const numUrls = urls.length;\n let numComplete = 0;\n const result = [];\n\n // Callback for a single file\n function partialCallback(text, urlIndex) {\n result[urlIndex] = text;\n numComplete++;\n\n // When all files have downloaded\n if (numComplete == numUrls) {\n callback(result);\n }\n }\n\n for (let i = 0; i < numUrls; i++) {\n \tloadExternalFile(urls[i], i, partialCallback, errorCallback);\n }\n}\n\n\n//Get the colours at index\nexports.getColorsRGB = (colors, index) => {\n const index_in_colors = Math.floor(index/3);\n const remainder = index%3;\n let hex_value = 0;\n if (remainder == 0)\n {\n hex_value = colors[index_in_colors].r;\n }\n else if (remainder == 1)\n {\n hex_value = colors[index_in_colors].g;\n }\n else if (remainder == 2)\n {\n hex_value = colors[index_in_colors].b;\n }\n const mycolor = new THREE.Color(hex_value);\n return [mycolor.r, mycolor.g, mycolor.b];\n}\n\n\nexports.copyMorphColorsToBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( var i = 0, l = morphColors.length; i < l; i ++ ) {\n let morphColor = morphColors[ i ];\n let colorArray = [];\n\t\t for ( var j = 0; j < geometry.faces.length; j ++ ) {\n let face = geometry.faces[j];\n let color = getColorsRGB(morphColor.colors, face.a);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.b);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.c);\n colorArray.push(color[0], color[1], color[2]);\n }\n var attribute = new THREE.Float32BufferAttribute( geometry.faces.length * 3 * 3, 3 );\n attribute.name = morphColor.name;\n array.push( attribute.copyArray( colorArray ) );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n\n exports.copyMorphColorsToIndexedBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( let i = 0, l = morphColors.length; i < l; i ++ ) {\n const morphColor = morphColors[ i ];\n const colorArray = [];\n\t\t for ( let j = 0; j < morphColor.colors.length * 3; j ++ ) {\n let color = getColorsRGB(morphColor.colors, j);\n colorArray.push(color[0], color[1], color[2]);\n }\n const attribute = new THREE.Float32BufferAttribute( colorArray, 3 );\n attribute.name = morphColor.name;\n array.push( attribute );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n exports.mergeVertices = ( geometry, tolerance = 1e-4 ) => {\n\n tolerance = Math.max( tolerance, Number.EPSILON );\n\n // Generate an index buffer if the geometry doesn't have one, or optimize it\n // if it's already available.\n var hashToIndex = {};\n var indices = geometry.getIndex();\n var positions = geometry.getAttribute( 'position' );\n var vertexCount = indices ? indices.count : positions.count;\n\n // next value for triangle indices\n var nextIndex = 0;\n\n // attributes and new attribute arrays\n var attributeNames = Object.keys( geometry.attributes );\n var attrArrays = {};\n var morphAttrsArrays = {};\n var newIndices = [];\n var getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\n // initialize the arrays\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n var name = attributeNames[ i ];\n\n attrArrays[ name ] = [];\n\n var morphAttr = geometry.morphAttributes[ name ];\n if ( morphAttr ) {\n\n morphAttrsArrays[ name ] = new Array( morphAttr.length ).fill().map( () => [] );\n\n }\n\n }\n\n // convert the error tolerance to an amount of decimal places to truncate to\n var decimalShift = Math.log10( 1 / tolerance );\n var shiftMultiplier = Math.pow( 10, decimalShift );\n for ( var i = 0; i < vertexCount; i ++ ) {\n\n var index = indices ? indices.getX( i ) : i;\n\n // Generate a hash for the vertex attributes at the current index 'i'\n var hash = '';\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var itemSize = attribute.itemSize;\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n // double tilde truncates the decimal value\n hash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier ) },`;\n\n }\n\n }\n\n // Add another reference to the vertex if it's already\n // used by another index\n if ( hash in hashToIndex ) {\n\n newIndices.push( hashToIndex[ hash ] );\n\n } else {\n\n // copy data to the new index in the attribute arrays\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var morphAttr = geometry.morphAttributes[ name ];\n var itemSize = attribute.itemSize;\n var newarray = attrArrays[ name ];\n var newMorphArrays = morphAttrsArrays[ name ];\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n var getterFunc = getters[ k ];\n newarray.push( attribute[ getterFunc ]( index ) );\n\n if ( morphAttr ) {\n\n for ( var m = 0, ml = morphAttr.length; m < ml; m ++ ) {\n\n newMorphArrays[ m ].push( morphAttr[ m ][ getterFunc ]( index ) );\n\n }\n\n }\n\n }\n\n }\n\n hashToIndex[ hash ] = nextIndex;\n newIndices.push( nextIndex );\n nextIndex ++;\n\n }\n\n }\n\n // Generate typed arrays from new attribute arrays and update\n // the attributeBuffers\n const result = geometry.clone();\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n var name = attributeNames[ i ];\n var oldAttribute = geometry.getAttribute( name );\n var attribute;\n\n var buffer = new oldAttribute.array.constructor( attrArrays[ name ] );\n if ( oldAttribute.isInterleavedBufferAttribute ) {\n\n attribute = new THREE.BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.itemSize );\n\n } else {\n\n attribute = geometry.getAttribute( name ).clone();\n attribute.setArray( buffer );\n\n }\n\n result.setAttribute( name, attribute );\n\n // Update the attribute arrays\n if ( name in morphAttrsArrays ) {\n\n for ( var j = 0; j < morphAttrsArrays[ name ].length; j ++ ) {\n\n var morphAttribute = geometry.morphAttributes[ name ][ j ].clone();\n morphAttribute.setArray( new morphAttribute.array.constructor( morphAttrsArrays[ name ][ j ] ) );\n result.morphAttributes[ name ][ j ] = morphAttribute;\n\n }\n\n }\n\n }\n\n // Generate an index buffer typed array\n var cons = Uint8Array;\n if ( newIndices.length >= Math.pow( 2, 8 ) ) cons = Uint16Array;\n if ( newIndices.length >= Math.pow( 2, 16 ) ) cons = Uint32Array;\n\n var newIndexBuffer = new cons( newIndices );\n var newIndices = null;\n if ( indices === null ) {\n\n newIndices = new THREE.BufferAttribute( newIndexBuffer, 1 );\n\n } else {\n\n newIndices = geometry.getIndex().clone();\n newIndices.setArray( newIndexBuffer );\n\n }\n\n result.setIndex( newIndices );\n\n return result;\n\n}\n\nfunction PhongToToon(materialIn) {\n\tif (materialIn.isMeshPhongMaterial) {\n\t\tlet material = new THREE.MeshToonMaterial({\n\t\t\tcolor : materialIn.color.clone(),\n\t\t\tmorphTargets : materialIn.morphTargets,\n\t\t\tmorphNormals : materialIn.morphNormals,\n\t\t\tvertexColors : materialIn.vertexColors,\n\t\t\ttransparent : materialIn.transparent,\n\t\t\topacity : materialIn.opacity,\n\t\t\tside : materialIn.side\n\t\t});\n\t\tif (materialIn.map)\n\t\t\tmaterial.map = materialIn.map;\n\t\treturn material;\n\t}\n\n\treturn materialIn;\n}\n\n\nexports.resolveURL = resolveURL;\nexports.loadExternalFile = loadExternalFile;\nexports.loadExternalFiles = loadExternalFiles;\nexports.PhongToToon = PhongToToon;\n","var THREE = require('three');\nconst markerImage = new Image(128, 128);\nmarkerImage.src = require(\"../assets/mapMarker.svg\");\nconst texture = new THREE.Texture();\ntexture.image = markerImage;\ntexture.needsUpdate = true;\nconst size = [0.015, 0.02, 1];\n\n/**\n * A special graphics type with a tear drop shape.\n * It is currently used to mark the location of a\n * {@link zincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Marker}\n */\nconst Marker = function(zincObject) {\n (require('./zincObject').ZincObject).call(this);\n this.texture = texture;\n let spriteMaterial = undefined;\n let sprite = undefined;\n this.morph = new THREE.Group();\n this.parent = zincObject;\n this.isMarker = true;\n let enabled = false;\n let vector = new THREE.Vector3();\n\n\n\tlet initialise = () => {\n spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n }); \n sprite = new THREE.Sprite(spriteMaterial);\n sprite.center.set(0.5, 0);\n this.morph.add(sprite);\n this.morph.position.set(0, 0, 0);\n this.morph.renderOrder = 10000;\n sprite.scale.set(size[0], size[1], size[2]);\n sprite.userData = this;\n }\n\n this.updateVisual = (min, max) => {\n let scale = 1;\n let opacity = 1;\n let porportion = 0;\n if (min !== max) {\n porportion = (1 - (vector.z - min) / (max - min));\n scale = 0.5 + porportion * 0.5;\n opacity = 0.6 + porportion * 0.4;\n }\n sprite.material.opacity = opacity;\n this.setSpriteSize(scale);\n }\n\n this.updateNDC = camera => {\n vector.copy(this.morph.position);\n vector.project(camera);\n vector.z = Math.min(Math.max(vector.z, 0), 1);\n return vector.z;\n }\n\n /**\n * Set the position of the marker.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n this.morph.position.set(x, y, z);\n }\n\n /**\n * Set the size of the marker.\n * \n * @param {Number} size - size to be set.\n */ \n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n /**\n * Clean up this object,\n */ \n this.dispose = () => {\n if (this.morph) {\n this.morph.dispose();\n }\n if (spriteMaterial) {\n spriteMaterial.dispose();\n }\n if (sprite) {\n sprite.dispose();\n }\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n /**\n * Enable and visualise the marker.\n */ \n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n }\n\n /**\n * Disable and hide the marker.\n */ \n this.disable = () => {\n enabled = false;\n this.morph.visible = false;\n }\n\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}\n\nMarker.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Marker = Marker;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzY1IDU2MCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzY1IDU2MCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMDBBRUVGIiBkPSJNMTgyLjksNTUxLjdjMCwwLjEsMC4yLDAuMywwLjIsMC4zUzM1OC4zLDI4MywzNTguMywxOTQuNmMwLTEzMC4xLTg4LjgtMTg2LjctMTc1LjQtMTg2LjkNCgkJQzk2LjMsNy45LDcuNSw2NC41LDcuNSwxOTQuNmMwLDg4LjQsMTc1LjMsMzU3LjQsMTc1LjMsMzU3LjRTMTgyLjksNTUxLjcsMTgyLjksNTUxLjd6IE0xMjIuMiwxODcuMmMwLTMzLjYsMjcuMi02MC44LDYwLjgtNjAuOA0KCQljMzMuNiwwLDYwLjgsMjcuMiw2MC44LDYwLjhTMjE2LjUsMjQ4LDE4Mi45LDI0OEMxNDkuNCwyNDgsMTIyLjIsMjIwLjgsMTIyLjIsMTg3LjJ6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\"","\n/**\n * Provide additional shaders to render time dependent color.\n */\nexports.augmentMorphColor = function() {\n return function(shader) {\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_pars_vertex>',\n [\n\t 'varying vec3 vColor;',\n 'attribute vec3 morphColor0;',\n 'attribute vec3 morphColor1;'\n ].join( '\\n' )\n );\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_vertex>',\n [\n 'vColor.xyz = color.xyz;',\n '#ifdef USE_MORPHTARGETS',\n 'vColor = morphColor0 * morphTargetInfluences[ 0 ];',\n 'vColor += morphColor1 * morphTargetInfluences[ 1 ];',\n '#endif'\n ].join( '\\n' )\n );\n };\n}\n","const THREE = require('three');\n\n/**\n * Zinc representation of glyph graphic, it contains the colours, \n * geometry and transformation of the glyph.\n * \n * @param {THREE.Geometry} geometry - Geometry of the glyph .\n * @param {THREE.Material} materialIn - Material of the glyph.\n * @param {Number} idIn - Id of the glyph.\n * \n * @class\n * @author Alan Wu\n * @return {Glyph}\n */\nconst Glyph = function (geometry, materialIn, idIn, glyphsetIn) {\n (require('./zincObject').ZincObject).call(this);\n let material = undefined;\n if (materialIn) {\n material = materialIn.clone();\n material.vertexColors = THREE.FaceColors;\n }\n const parent = glyphsetIn;\n this.id = idIn;\n let label = undefined;\n let labelString = undefined;\n const group = new THREE.Group();\n this.isGlyph = true;\n\n /**\n * Create a glyph using mesh\n * @param {THREE.Mesh} meshIn - Mesh to create the glyph from\n *\n * @returns {Boolean} true if successful\n */\n this.fromMesh = meshIn => {\n if (meshIn && meshIn.isMesh) {\n this.morph = meshIn.clone();\n this.morph.userData = this;\n group.add(this.morph);\n return true;\n }\n return false;\n }\n\n if (geometry && material) {\n this.fromMesh(new THREE.Mesh(geometry, material));\n }\n\n /**\n * Get the {Glyphset} containing this glyph.\n *\n * @returns {Boolean} true if successful\n */\n this.getGlyphset = function () {\n return parent;\n }\n\n /**\n * Set and update the text containing this glyph.\n * @param {String} text - Label to be set for this instance\n */\n this.setLabel = text => {\n if (text && (typeof text === 'string' || text instanceof String)) {\n labelString = text;\n if (this.morph)\n this.morph.name = text;\n }\n if (label)\n this.showLabel();\n }\n\n /**\n * Display label with the choosen colour. It will replace the current\n * label.\n * @param {THREE.Color} colour - Colour for the label.\n */\n this.showLabel = (colour) => {\n if (label) {\n position = label.getPosition();\n group.remove(label.getSprite());\n label.dispose();\n label = undefined;\n }\n if (labelString && (typeof labelString === 'string' || labelString instanceof String)) {\n let position = [0, 0, 0];\n label = new (require('./label').Label)(labelString, colour);\n label.setPosition(position[0], position[1], position[2]);\n group.add(label.getSprite());\n }\n }\n\n /**\n * Get the group containing the label and mesh.\n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Get the label of this glyph\n * @return {Label}\n */\n this.getLabel = () => {\n return labelString;\n }\n\n /**\n * Get the mesh of this glyph.\n * @return {THREE.Mesh}\n */\n this.getMesh = () => {\n return this.morph;\n }\n\n /**\n * Set the transformation of this glyph.\n * @param {Array} position - Three components vectors containing position of the\n * transformation.\n * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n * transformation.\n * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n * transformation.\n * @param {Array} position - Three components vectors containing axis3 rotation of the\n * transformation.\n */\n this.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n if (label)\n label.setPosition(position[0], position[1], position[2]);\n }\n\n /**\n * Set the color of the glyph and its label.\n * \n * @param {THREE.Color} color - Colour to be set.\n */\n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n }\n\n /**\n * Clear and free its memory.\n */\n this.dispose = () => {\n if (this.material)\n this.material.dispose();\n this.morph = undefined;\n }\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\n/**\n * Bitmap labels, this is used with {@link Glyph} to \n * provide labels.\n * \n * @param {String} textIn - Text to be displayed dwith the label.\n * @param {THREE.Color} colour - Colour to be set for the label.\n * \n * @class\n * @author Alan Wu\n * @return {Label}\n */\nexports.Label = function (textIn, colour) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n /**\n * Get the current position in an array containing the x, y and z\n * coordinates.\n * \n * @return {Array}\n */\n this.getPosition = () => {\n if (sprite)\n return [sprite.position.x, sprite.position.y, sprite.position.z];\n return [0, 0, 0];\n }\n\n /**\n * Set the position of the label in 3D coordinates.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n /**\n * Set the colour of the label\n * \n * @param {THREE.Color} colour - colour to be set\n */\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n\n /**\n * Scale the label.\n * \n * @param {Number} scaling - Scale to be set.\n */\n this.setScale = scaling => {\n if (sprite && scaling > 0.0)\n sprite.scale.set(scaling, scaling, 1.0);\n }\n\n /**\n * Free up the memory\n */\n this.dispose = () => {\n sprite.dispose();\n }\n\n /**\n * Get the intrnal sprite.\n * \n * @return {THREE.Sprite}\n */\n this.getSprite = () => {\n return sprite;\n }\n\n /**\n * Get the text.\n * \n * @return {String}\n */\n this.getString = () => {\n return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loaders/JSONLoader').JSONLoader;\n\n/**\n * This is a container of {@link Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n const _current_positions = [];\n const _current_axis1s = [];\n const _current_axis2s = [];\n const _current_axis3s = [];\n const _current_scales = [];\n const _current_colors = [];\n const _glyph_axis_array = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n /**\n * Get the {@link Three.Group} containing all of the glyphs' meshes.\n * @returns {Three.Group}\n */\n this.getGroup = () => {\n return this.morph;\n }\n\n /**\n * Copy glyphset data into this glyphset then load the glyph's geoemtry \n * with the provided glyphURL. FinishCallback will be called once\n * glyph is loaded.\n * \n * @param {Array} glyphsetData - contains the informations about the glyphs.\n * @param {String} glyphURL - URL to the geometry which will be applied to all\n * all the glyphs in the glyphset once loaded.\n * @param {Function} finishCallback - User's function to be called once glyph's\n * geometry is loaded.\n */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n this.morph = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n object.geometry.dispose();\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n /**\n * Calculate the actual transformation value that can be applied \n * to the transformation matrix.\n * \n * @returns {Array}\n */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale, return_arrays) => {\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[j] + scale[j] * scaleFactors[j];\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays[0] = [final_point, final_axis1, final_axis2, final_axis3];\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays[1] = [mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3];\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[0] + scale[j] * scaleFactors[0];\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = baseSize[0] + use_scale * scaleFactors[0];\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays[k] = [final_point, final_axis1, final_axis2, final_axis3];\n }\n }\n return return_arrays;\n };\n\n /**\n * Update transformation for each of the glyph in this glyphset.\n */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n _glyph_axis_array.length = numberOfGlyphs;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale, _glyph_axis_array);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n /**\n * Update colour for each of the glyph in this glyphset.\n */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n /**\n * Update the current states of the glyphs in this glyphset, this includes transformation and\n * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n * the internal time has been updated.\n */\n const updateMorphGlyphsets = () => {\n const current_positions = _current_positions;\n const current_axis1s = _current_axis1s;\n const current_axis2s = _current_axis2s;\n const current_axis3s = _current_axis3s;\n const current_scales = _current_scales;\n const current_colors = _current_colors;\n\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n _current_positions.length = bottom_positions.length;\n _current_axis1s.length = bottom_positions.length;\n _current_axis2s.length = bottom_positions.length;\n _current_axis3s.length = bottom_positions.length;\n _current_scales.length = bottom_positions.length;\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions[i] = proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i];\n current_axis1s[i] = proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i];\n current_axis2s[i] = proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i];\n current_axis3s[i] = proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i];\n current_scales[i] = proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i];\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n current_colors.length = bottom_colors.length;\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors[i] = _bot_colour.getHex();\n }\n /*\n for (var i = 0; i < bottom_colors.length; i++) {\n current_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n }\n */\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n };\n\n /**\n * Display the label of the glyphs in the glyphset.\n */\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n /**\n * Create the glyphs in the glyphset.\n * \n * @param {Boolean} displayLabels -Flag to determine either the labels should be display or not.\n */\n const createGlyphs = (displayLabels) => {\n if ((labels != undefined) && displayLabels) {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n if (labels != undefined && labels[i] != undefined) {\n glyph.setLabel(labels[i]);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n }\n if ((labels != undefined) && displayLabels) {\n this.showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n /**\n * Add a custom {@link Glyph} to this {@link Glyphset}.\n * \n * @param {Glyph} Glyph to be added.\n */\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Add a THREE.Mesh object to be displayed as glyph in this {@link Glyphset}.\n * \n * @param {THREE.Mesh} Mesh to be added.\n * @param {Number} id of the mesh.\n */\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n /**\n * A function which iterates through the list of glyphs and call the callback\n * function with the glyph as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyph\n * as an argument.\n */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n const tempGeometry = geometry.toBufferGeometry();\n this.geometry.copy(tempGeometry);\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\n tempGeometry.dispose();\n if (materials && materials[0])\n this.morph.material = materials[0];\n createGlyphs(displayLabels);\n this.morph.name = this.groupName;\n this.morph.userData = this;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n let center = new THREE.Vector3();\n this.getBoundingBox().getCenter(center);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let position = new THREE.Vector3();\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n position.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = center.distanceTo(position);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.closestVertexIndex]) {\n glyphList[this.closestVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.closestVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get the bounding box for the whole set of glyphs.\n * \n * @return {Three.Box3};\n */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n _boundingBox2.copy(_boundingBox1).applyMatrix4(_transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n /**\n * Set the local time of this glyphset.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if ((numberOfTimeSteps > 0) && (morphColours || morphVertices))\n return true;\n return false;\n }\n\n /**\n * Get the current inbuild time of the \n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n /**\n * Clear this glyphset and its list of glyphs which will release them from the memory.\n */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n /**\n * Update the glyphsets if required the render.\n */\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('../three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('../three/Geometry').Face3;\nvar Geometry = require('../three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\nvar VideoHandler = require('../videoHandler').VideoHandler;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n this.paramsString = \"\";\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\n const params = url.split(\"?\");\n\n //There are parameters, add them to the target\n if (url.length === 2) {\n\n this.paramsString = paramsStrings[1];\n\n } else {\n\n this.paramsString = \"\";\n\n }\n\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n if (scope && scope.parse) {\n var object = scope.parse( json, texturePath );\n onLoad( object.geometry, object.materials );\n }\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n if (json.uvs) {\n\n for ( i = 0; i < json.uvs.length; i ++ ) {\n\n geometry.uvs[i] = [];\n\n for ( let k = 0; k < json.uvs[i].length ; k++ ) {\n\n geometry.uvs[i][k] = json.uvs[i][k];\n\n }\n \n }\n \n }\n\n if (normals) {\n\n for ( i = 0; i < normals.length; i ++ ) {\n\n geometry.normals[i] = normals[i];\n\n }\n \n }\n\n if (colors) {\n\n for ( i = 0; i < colors.length; i ++ ) {\n\n geometry.colors[i] = colors[i];\n\n }\n \n }\n\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\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}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\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\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\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\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\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 ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\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\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\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\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphNormals !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphNormals.length; i < l; i ++ ) {\n\n if (geometry.morphTargets[ i ]) {\n\n geometry.morphTargets[ i ].normals = [];\n\n var dstNormals = geometry.morphTargets[ i ].normals;\n var srcNormals = json.morphNormals[ i ].normals;\n\n for ( var v = 0, vl = srcNormals.length; v < vl; v += 3 ) {\n\n var normals = new Vector3();\n normals.x = srcNormals[ v ];\n normals.y = srcNormals[ v + 1 ] ;\n normals.z = srcNormals[ v + 2 ] ;\n\n dstNormals.push( normals );\n\n }\n\n geometry.morphNormalsReady = true;\n\n }\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\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 parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\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\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\n if (this.paramsString) {\n\n fullPath = fullPath + `?${this.paramsString}`;\n \n }\n\n\t\t\t\t\tconst videoHandler = new VideoHandler(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n/**\n * Provide basic functionality to display video as texture.\n * VideoTexture is used for creating and updating a video projected onto a Three.js texture\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {VideoHandler}\n */\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Pointset}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n this.isPointset = true;\n\n /** Shape of the points is created using the function below */\n const getCircularTexture = () => {\n var image = new Image();\n image.src = require(\"../assets/disc.png\");\n const texture = new THREE.Texture();\n texture.image = image;\n texture.needsUpdate = true;\n return texture;\n }\n\n /**\n * Create the pointsets using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of points to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n this.createMesh = (geometryIn, materialIn, options) => {\n if (geometryIn && materialIn) {\n let geometry = this.toBufferGeometry(geometryIn, options);\n const texture = getCircularTexture();\n materialIn.map = texture;\n let point = new Points(geometry, materialIn);\n this.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n }\n }\n\n /**\n * Set the size of the points.\n * \n * @param {Number} size - size to be set.\n */\n this.setSize = size => {\n if (this.morph && this.morph.material) {\n this.morph.material.size = size;\n this.morph.material.needsUpdate = true;\n }\n }\n\n /**\n * Turn size attenuation on/off based on the flag.\n * \n * @param {Boolean} flag - Determin either size attenuation\n * should be on or off.\n */\n this.setSizeAttenuation = flag => {\n if (this.morph && this.morph.material) {\n this.morph.material.sizeAttenuation = flag;\n this.morph.material.needsUpdate = true;\n }\n }\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ 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} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","const THREE = require('three');\n\n/**\n * Provides an object which stores lines.\n * This is created when a valid json file containing lines is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n /**\n * Create the line segements using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of lines to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ])\n\t\t\t\tmaterialIn.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n\t\t\tthis.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\n\t}\n\n\n /**\n * Set the width for the lines.\n * \n * @param {Number} width - Width of the lines.\n */\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\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// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\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// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ 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} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","const THREE = require('three');\n\n/**\n * Texture array object for holding array of images into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {TextureArray}\n */\nconst TextureArray = function () {\n (require('./texture').Texture).call(this);\n this.isTextureArray = true;\n\n\n /**\n * Read images from an array containg src locations.\n * \n * @async\n * @param {Array} srcArrays - List of source location of the images.\n */\n this.loadFromImages = async function (srcArrays) {\n let w = 1;\n let h = 1;\n let d = 0;\n if (srcArrays && srcArrays.length) {\n this.isLoading = true;\n const image = new Image();\n image.crossOrigin = \"Anonymous\";\n const canvas = document.createElement(\"canvas\");\n let length = 0;\n const dataStacks = new Array(srcArrays.length);\n for (let i = 0; i < srcArrays.length; i++) {\n const data = await this.imageToUint8Array(image, srcArrays[i], canvas);\n if (data && data.array) {\n w = data.width;\n h = data.height;\n dataStacks[d] = data.array;\n length += dataStacks[d].length;\n d++;\n }\n }\n const fullArray = new Uint8Array(length);\n length = 0;\n dataStacks.forEach(data => {\n fullArray.set(data, length);\n length += data.length;\n });\n\n this.impl = new THREE.DataTexture2DArray(fullArray, w, h, d);\n this.size = {\n width: w,\n height: h,\n depth: d\n };\n this.isLoading = false;\n }\n }\n\n /**\n * Get and create the material containing shaders and the textures.\n * The texture must be read and ready before calling this function.\n * \n *\n * @param {Object} options - Customise the material with the options object.\n * @param {String} options.fs - string of the fragment shader used for \n * visualisation.\n * @param {String} options.vs - string of the vertex shader used for \n * visualisation.\n * @param {Object} options.uniforms - Containing the data to be passed into the shaders.\n * @param {String} options.glslVersion - Version of glsl used for compile this shader.\n * \n */\n this.getMaterial = function (options) {\n if (this.impl) {\n let material = undefined;\n if (options) {\n if (options.vs && options.fs) {\n let transparent = true;\n if (options.transparent)\n transparent = options.transparent;\n let side = THREE.FrontSide;\n if (options.side)\n side = options.side;\n material = new THREE.ShaderMaterial({\n transparent,\n uniforms: options.uniforms,\n vertexShader: options.vs,\n fragmentShader: options.fs,\n side\n });\n if (options.glslVersion) {\n material.glslVersion = options.glslVersion;\n }\n }\n } else {\n material = new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n if (material) {\n material.needsUpdate = true;\n return material;\n }\n }\n }\n}\n\nTextureArray.prototype = Object.create((require('./texture').Texture).prototype);\nexports.TextureArray = TextureArray;\n","const THREE = require('three');\n\n/**\n * Base texture object for importing images and turning them into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {Texture}\n */\nconst Texture = function () {\n this.isTexture = true;\n this.impl = undefined;\n this.isLoading = false;\n this.size = {\n width: 1,\n height: 1,\n depth: 0\n };\n}\n\n/**\n * Read an image from src.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * \n * @return {Promise} img on resolve.\n */\nTexture.prototype.loadImage = function (img, src) {\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = src;\n })\n}\n\n/**\n @typedef IMAGE_UINT8_RETURN\n @type {Set}\n @property {Uint8Array} array - Array containing the uint8 image value.\n @property {Number} width - Phyiscal image width.\n @property {Number} height - Phyiscal image height.\n */\n/**\n * Read an image from src and turn it into Uint8Array.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * @param {Canvas} canvas - Canvas html element used for the conversion.\n * \n * @return {IMAGE_UNIT8_RETURN}\n */\nTexture.prototype.imageToUint8Array = async function (img, src, canvas) {\n await this.loadImage(img, src);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n return {\n array: new Uint8Array(ctx.getImageData(0, 0, canvas.width, canvas.height).data.buffer),\n width: canvas.width,\n height: canvas.height\n };\n}\n\nTexture.prototype.loadFromImages = async function (srcArrays) {\n return\n}\n\n/**\n * Return true if the texture is ready for consumption.\n * \n * @return {Boolean}\n */\nTexture.prototype.isReady = function () {\n if (this.impl && !this.isLoading)\n return true;\n return false;\n}\n\n/**\n * Return true if the texture is ready for consumption, otherwise false.\n * \n * @return {Boolean}\n */\nTexture.prototype.getMaterial = function () {\n if (this.impl) {\n return new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n}\n\nexports.Texture = Texture;\n","const THREE = require('three');\nconst shader = require(\"../shaders/textureSlide.js\");\n/**\n * Provides a class which create a texture stacks in a block\n * with shaders allowing slices of texture to be displayed.\n * \n * @param {TextureArray} textureIn - An object of texture array\n * holding texture information.\n * \n * @class\n * @author Alan Wu\n * @return {TextureSlides}\n */\nconst TextureSlides = function (textureIn) {\n (require('./texturePrimitive').TexturePrimitive).call(this, textureIn);\n this.isTextureSlides = true;\n \n /**\n @typedef SLIDE_SETTINGS\n @type {Set}\n @property {String} direction - the value must be x, y or z, specify the\n direction the slide should be facing.\n @property {Number} value - Normalised value of the location on direction.\n */\n /**\n * Create the slides required for visualisation based on the slide settings.\n * The slides itself is an {THREE.PlanGeometry} object.\n * \n * @param {SLIDE_SETTINGS} slideSettings - An array to each slide settings.\n */\n this.createSlides = slideSettings => {\n if (!this.morph) this.morph = new THREE.Group();\n if (this.texture && this.texture.isTextureArray && this.texture.isReady()) {\n slideSettings.forEach(slide => {\n if (slide.direction && slide.value) {\n const geometry = new THREE.PlaneGeometry( 1, 1 );\n geometry.translate(0.5, 0.5, 0);\n const uniforms = shader.getUniforms();\n uniforms.diffuse.value = this.texture.impl;\n uniforms.depth.value = this.texture.size.depth;\n switch(slide.direction) {\n case \"x\":\n uniforms.slide.value.set(slide.value, 0, 0);\n break;\n case \"y\":\n uniforms.slide.value.set(0, slide.value, 0);\n break;\n case \"z\":\n uniforms.slide.value.set(0, 0, slide.value);\n break;\n default:\n break;\n }\n const options = {\n fs: shader.fs,\n vs: shader.vs,\n uniforms: uniforms,\n glslVersion: shader.glslVersion,\n side: THREE.DoubleSide,\n transparent: false\n };\n const material = this.texture.getMaterial(options);\n material.needsUpdate = true;\n const mesh = new THREE.Mesh( geometry, material );\n this.morph.add(mesh);\n }\n });\n this.boundingBoxUpdateRequired = true;\n }\n }\n\n /**\n * Get the array of slides, return them in an array\n *\n * @return {Array} - Return an array of {@link THREE.Object)\n */\n this.getSlides = () => {\n if (this.morph) return [...this.morph.children];\n return [];\n }\n\n /**\n * Remove a slide, this will dispose the slide and its material.\n *\n * @param {Slide} slide - An array to each slide settings.\n */\n this.removeSlide = slide => {\n if (slide && this.morph) {\n if (this.morph.getObjectById(slide.id)) {\n this.morph.remove(slide);\n slide.disppose();\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n this.boundingBoxUpdateRequired = true;\n }\n }\n }\n\n /**\n * Clean up all internal objects.\n */\n this.dispose = () => {\n this.morph.children.forEach(slide=> {\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n });\n (require('./texturePrimitive').TexturePrimitive).prototype.dispose.call(this);\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Get the bounding box of this slides.\n * It uses the max and min of the slides position and the\n * transformation to calculate the position of the box.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = function() {\n if (this.morph && this.morph.children && this.morph.visible &&\n this.boundingBoxUpdateRequired) {\n this.morph.children.forEach(slide=> {\n const value = slide.material.uniforms.slide.value;\n this.cachedBoundingBox.expandByPoint(value);\n });\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n}\n\n\nTextureSlides.prototype = Object.create((require('./texturePrimitive').TexturePrimitive).prototype);\nexports.TextureSlides = TextureSlides;\n","const THREE = require('three');\n\nconst glslVersion = THREE.GLSL3;\n\nconst fs =\n`\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray diffuse;\nin vec3 vUw;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 color = texture( diffuse, vUw );\n\n // lighten a bit\n outColor = vec4( color.rgb + .2, 1.0 );\n\n}\n`;\n\nconst vs = \n`\nout vec3 vUw;\nuniform float depth;\nuniform vec3 slide;\n\nvoid main() {\n\n vec3 slidePos = position.xyz;\n\n if (slide.x > 0.0)\n slidePos = vec3(slide.x, position.x, position.y);\n if (slide.y > 0.0)\n slidePos = vec3(position.x, slide.y, position.y);\n if (slide.z > 0.0)\n slidePos = vec3(position.x, position.y, slide.z);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( slidePos, 1.0 );\n\n vUw.xyz = vec3(slidePos.x, slidePos.y, slidePos.z * depth);\n\n}\n`;\n\nconst getUniforms = function() {\n return {\n diffuse: { value: undefined },\n depth: { value: 1 },\n slide: { value: new THREE.Vector3( 0, 0, 1 ) }\n };\n}\n\nexports.fs = fs;\nexports.vs = vs;\nexports.glslVersion = glslVersion;\nexports.getUniforms = getUniforms;\n","const THREE = require('three');\n\n/**\n * Provides a base class object which stores textures and rendering object.\n * \n * @class\n * @author Alan Wu\n * @return {TexturePrimitive}\n */\nconst TexturePrimitive = function (textureIn) {\n (require('./zincObject').ZincObject).call(this);\n this.isTexturePrimitive = true;\n this.texture = textureIn;\n}\n\nTexturePrimitive.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.TexturePrimitive = TexturePrimitive;\n","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet localRect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\tlocalRect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\tlocalRect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (localRect) {\r\n\t\t\t\tcurrentOffset[0] = localRect.left;\r\n\t\t\t\tcurrentOffset[1] = localRect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n this.isWebGL2 = () => {\r\n if (renderer)\r\n return renderer.capabilities.isWebGL2;\r\n return false;\r\n }\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst SceneLoader = require('./sceneLoader').SceneLoader;\nconst SceneExporter = require('./sceneExporter').SceneExporter;\nconst Viewport = require('./controls').Viewport;\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"sc\" + uniqueiId++;\n}\n\nconst defaultMetadata = function() {\n return { \n Duration: \"6 secs\",\n OriginalDuration: \"-\",\n TimeStamps: {}\n }\n};\n\nconst defaultDuration = 6000;\n\n/**\n * A Scene contains {@link Region},and \n * {@link CameraControls} which controls the viewport and additional features.\n * It is the main object used for controlling what is and what is not displayed\n * on the renderer.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {Scene}\n */\nexports.Scene = function (containerIn, rendererIn) {\n const container = containerIn;\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n const scene = new THREE.Scene();\n const rootRegion = new (require('./region').Region)();\n scene.add(rootRegion.getGroup());\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-left\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n let pickableObjectsList = [];\n this.forcePickableObjectsUpdate = false;\n this.uuid = getUniqueId();\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n \n\n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n this.camera.aspect = getDrawingWidth() / getDrawingHeight();\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\n zincCameraControls.onResize();\n }\n\n /**\n * Reset the viewport of this scene to its original state. \n */\n this.resetView = () => {\n this.onWindowResize();\n zincCameraControls.resetView();\n }\n\n /**\n * Set the zoom level by unit scroll rate\n */\n this.changeZoomByScrollRateUnit = unit => {\n zincCameraControls.changeZoomByScrollRateUnit(unit);\n }\n\n //Setup the camera for this scene, it also initialise the lighting\n const setupCamera = () => {\n this.camera = new THREE.PerspectiveCamera(40, getDrawingWidth() / getDrawingHeight(), 0.0, 10.0);\n this.ambient = new THREE.AmbientLight(0xffffff, 0.2);\n scene.add(this.ambient);\n\n this.directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);\n scene.add(this.directionalLight);\n zincCameraControls = new (require('./controls').CameraControls)(this.camera, rendererIn.domElement, rendererIn, this);\n\n zincCameraControls.setDirectionalLight(this.directionalLight);\n zincCameraControls.resetView();\n\n minimap = new (require('./minimap').Minimap)(this);\n };\n\n setupCamera();\n\n /**\n * Load the viewport Data from the argument {@link Zinc.Viewport} and set it as \n * the default viewport of this scene.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.loadView = settings => {\n const viewPort = new Viewport();\n viewPort.setFromObject(settings);\n zincCameraControls.setCurrentCameraSettings(viewPort);\n return true;\n }\n\n /**\n * Set up multiple views.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.setupMultipleViews = (defaultView, entries) => {\n for (const [name, settings] of Object.entries(entries)) {\n const viewport = new Viewport();\n viewport.setFromObject(settings);\n zincCameraControls.addViewport(name, viewport);\n }\n zincCameraControls.setDefaultViewport(defaultView);\n }\n\n /**\n * Get the bounding box of all the object in this scene only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = () => {\n return rootRegion.getBoundingBox(true);\n }\n\n /**\n * Adjust the viewport to display the desired volume provided by the bounding box.\n * \n * @param {THREE.Box3} boundingBox - The bounding box which describes the volume of\n * which we the viewport should be displaying.\n */\n this.viewAllWithBoundingBox = boundingBox => {\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const radius = boundingBox.min.distanceTo(boundingBox.max) / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = zincCameraControls.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n\n zincCameraControls.setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Adjust zoom distance to include all primitives in scene only.\n */\n this.viewAll = () => {\n const boundingBox = this.getBoundingBox();\n this.viewAllWithBoundingBox(boundingBox);\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = callbackFunction => {\n rootRegion.forEachGeometry(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = callbackFunction => {\n rootRegion.forEachGlyphset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = callbackFunction => {\n rootRegion.forEachPointset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = callbackFunction => {\n rootRegion.forEachLine(callbackFunction, true);\n }\n\n /** \n * Find and return all geometries in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = GroupName => {\n return rootRegion.findGeometriesWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all pointsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = GroupName => {\n return rootRegion.findPointsetsWithGroupName(GroupName, true);\n }\n /** \n * Find and return all glyphsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = GroupName => {\n return rootRegion.findGlyphsetsWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all lines in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = GroupName => {\n return rootRegion.findLinesWithGroupName(GroupName, true);\n }\n\n /** \n * Find a list of objects with the specified name, this will\n * tranverse through the region tree to find all child objects\n * with matching name.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = GroupName => {\n return rootRegion.findObjectsWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n return rootRegion.findObjectsWithAnatomicalId(anatomicalId, true);\n }\n\n /** \n * Get the bounding box of all zinc objects in list.\n * \n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Box3}\n */\n this.getBoundingBoxOfZincObjects = objectsArray => {\n let boundingBox = undefined;\n for (let i = 0; i < objectsArray.length; i++) {\n let box = objectsArray[i].getBoundingBox();\n if (box) {\n if (!boundingBox)\n boundingBox = box;\n else\n boundingBox.union(box);\n }\n }\n return boundingBox;\n }\n\n /** \n * Convert the vector3 into screen coordinates.\n * \n * @param {THREE.Vector3} point - Vector 3 containing the point to convert,\n * this vector will be overwritten with the returned value.\n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Vector3}\n */\n this.vectorToScreenXY = point => {\n point.project(this.camera);\n let width = getDrawingWidth();\n let height = getDrawingHeight();\n let widthHalf = (width / 2);\n let heightHalf = (height / 2);\n point.x = (point.x * widthHalf) + widthHalf;\n point.y = - (point.y * heightHalf) + heightHalf;\n return point;\n }\n\n /** \n * Get the screen coordinate of the centroid of provided list of objects.\n * \n * @param {Array} zincObjects - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getObjectsScreenXY = zincObjects => {\n if (zincObjects && zincObjects.length > 0) {\n let boundingBox = this.getBoundingBoxOfZincObjects(zincObjects);\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n return this.vectorToScreenXY(center);\n }\n return undefined;\n }\n\n /** \n * Get the screen coordinate of the centroid of all objects \n * in scene with the provided name.\n * \n * @param {String} name - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getNamedObjectsScreenXY = name => {\n let zincObjects = this.findObjectsWithGroupName(name);\n return this.getObjectsScreenXY(zincObjects);\n };\n\n /** \n * Add zinc object into the root {@link Region} of sfcene.\n * \n * @param {ZincObject} - zinc object ot be added.\n * @returns {THREE.Vector3}\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n rootRegion.addZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback) => {\n sceneLoader.loadGlyphsetURL(rootRegion, metaurl, glyphurl, groupName, finishCallback);\n }\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadPointsetURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadLinesURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (url, groupName, finishCallback) => {\n sceneLoader.loadSTL(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (url, groupName, finishCallback) => {\n sceneLoader.loadOBJ(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (url, finishCallback, allCompletedCallback) => {\n sceneLoader.loadMetadataURL(rootRegion, url, finishCallback, allCompletedCallback);\n }\n\n /**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n sceneLoader.loadModelsURL(rootRegion. urls, colours, opacities, timeEnabled, morphColour, finishCallback);\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = url => {\n sceneLoader.loadViewURL(url);\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\n sceneLoader.loadFromViewURL(jsonFilePrefix, finishCallback);\n }\n\n /**\n * Load GLTF into this scene object.\n */\n this.loadGLTF = (url, finishCallback, options) => {\n sceneLoader.loadGLTF(rootRegion, url, finishCallback, options);\n }\n\n //Update the directional light for this scene.\n this.updateDirectionalLight = () => {\n zincCameraControls.updateDirectionalLight();\n }\n\n /**\n * Add any {THREE.Object} into this scene.\n * @param {THREE.Object} object - to be addded into this scene.\n */\n this.addObject = object => {\n scene.add(object);\n }\n\n /**\n * Remove any {THREE.Object} from this scene.\n * @param {THREE.Object} object - to be removed from this scene.\n */\n this.removeObject = object => {\n scene.remove(object);\n }\n\n /**\n * Get the current time of the scene.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (videoHandler != undefined) {\n return videoHandler.getCurrentTime(duration);\n }\n const time = rootRegion.getCurrentTime();\n if (time !== -1) \n return time;\n \n return 0;\n }\n\n /**\n * Set the current time of all the geometries and glyphsets of this scene.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphsTime = (time) => {\n if (videoHandler != undefined) {\n videoHandler.setMorphTime(time, duration);\n }\n rootRegion.setMorphTime(time, true);\n }\n\n /**\n * Check if any object in this scene is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\n }\n return rootRegion.isTimeVarying();\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation) => {\n // Let video dictates the progress if one is present\n let options = {};\n options.camera = zincCameraControls;\n options.displayMarkers = this.displayMarkers;\n options.markerDepths = [];\n\t if (videoHandler) {\n\t\t if (videoHandler.isReadyToPlay()) {\n\t\t\t if (playAnimation) {\n videoHandler.video.play();\n\t\t\t } else {\n\t\t\t\t videoHandler.video.pause();\n\t\t\t }\n const currentTime = videoHandler.video.currentTime /\n videoHandler.getVideoDuration() * duration;\n\t\t\t if (0 == sceneLoader.toBeDownloaded) {\n\t\t\t\t zincCameraControls.setTime(currentTime);\n\t\t\t\t zincCameraControls.update(0);\n rootRegion.setMorphTime(currentTime, true);\n rootRegion.renderGeometries(0, 0, playAnimation, undefined, true);\n\t\t\t } else {\n\t\t\t\t zincCameraControls.update(0);\n\t\t\t }\n\t\t\t //console.log(videoHandler.video.currentTime / videoHandler.getVideoDuration() * 6000);\n\t\t } else {\n\t\t\t myPlayRate = 0;\n\t\t }\n\t } else {\n\t\t if (0 == sceneLoader.toBeDownloaded) {\n zincCameraControls.update(delta);\n rootRegion.renderGeometries(playRate, delta, playAnimation, options, true);\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n this.setVideoHandler = (videoHandlerIn) => {\n if (!videoHandler)\n videoHandler = videoHandlerIn;\n }\n\n /**\n * Set a group of scenes into this parent scene. This group of\n * scenes will also be rendered when this scene is rendered.\n * @private\n */\n this.setAdditionalScenesGroup = scenesGroup => {\n scene.add(scenesGroup);\n }\n\n let getWindowsPosition = (align, x_offset, y_offset, width, height,\n renderer_width, renderer_height) => {\n let x = 0;\n let y = 0;\n if (align.includes(\"top\")) {\n y = renderer_height - height - y_offset;\n } else if (align.includes(\"bottom\")) {\n y = y_offset;\n } else {\n y = Math.floor((renderer_height - height) / 2.0);\n }\n if (align.includes(\"left\")) {\n x = x_offset;\n } else if (align.includes(\"right\")) {\n x = renderer_width - x_offset- width;\n } else {\n x = Math.floor((renderer_width - width) / 2.0);\n }\n return {x: x, y: y};\n }\n\n const renderMinimap = renderer => {\n if (this.displayMinimap === true) {\n renderer.setScissorTest(true);\n renderer.getSize(_markerTarget);\n if (this.minimapScissor.updateRequired) {\n scissor = getWindowsPosition(this.minimapScissor.align,\n this.minimapScissor.x_offset, \n this.minimapScissor.y_offset, \n this.minimapScissor.width,\n this.minimapScissor.height,\n _markerTarget.x, _markerTarget.y);\n this.minimapScissor.updateRequired = false;\n }\n renderer.setScissor(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height);\n renderer.setViewport(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height); \n minimap.updateCamera();\n scene.add(minimap.mask);\n renderer.render(scene, minimap.camera);\n scene.remove(minimap.mask);\n renderer.setScissorTest(false);\n renderer.setViewport(0, 0, _markerTarget.x, _markerTarget.y);\n }\n }\n\n /**\n * Render the scene.\n * @private\n */\n this.render = renderer => {\n if (this.autoClearFlag)\n renderer.clear();\n if (stereoEffectFlag && stereoEffect) {\n stereoEffect.render(scene, this.camera);\n } else {\n renderer.render(scene, this.camera);\n renderMinimap(renderer);\n }\n }\n\n /**\n * Enable or disable interactive control, this is on by default.\n * \n * @param {Boolean} flag - Indicate either interactive control \n * should be enabled or disabled.\n */\n this.setInteractiveControlEnable = flag => {\n if (flag == true)\n zincCameraControls.enable();\n else\n zincCameraControls.disable();\n }\n\n /**\n * Get the camera control of this scene.\n * @return {Zinc.CameraControls}\n */\n this.getZincCameraControls = () => {\n return zincCameraControls;\n }\n\n /**\n * Get the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n /**\n * Set the default duration value for geometries and glyphsets\n * that are to be loaded into this scene.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n rootRegion.setDuration(durationIn);\n duration = durationIn;\n zincCameraControls.setPathDuration(durationIn);\n sceneLoader.duration = durationIn;\n }\n\n /**\n * Get the default duration value.\n * @return {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Enable or disable stereo effect of this scene.\n * @param {Boolean} stereoFlag - Indicate either stereo effect control \n * should be enabled or disabled.\n */\n this.setStereoEffectEnable = stereoFlag => {\n if (stereoFlag == true) {\n if (!stereoEffect) {\n stereoEffect = new require('./controls').StereoEffect(rendererIn);\n }\n }\n rendererIn.setSize(getDrawingWidth(), getDrawingHeight());\n this.camera.updateProjectionMatrix();\n stereoEffectFlag = stereoFlag;\n }\n\n\n /**\n * Check rather object is in scene.\n * \n * @return {Boolean}\n */\n this.objectIsInScene = zincObject => {\n return rootRegion.objectIsInRegion(zincObject, true);\n }\n\n /**\n * Transition the camera view to view the entirety of the \n * bounding box with a smooth transition within the providied\n * transitionTime.\n * \n * @param {THREE.Box3} boundingBox - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.alignBoundingBoxToCameraView = (boundingBox, transitionTime) => {\n if (boundingBox) {\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n const viewport = this.getZincCameraControls().getCurrentViewport();\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const upVector = new THREE.Vector3(viewport.upVector[0],\n viewport.upVector[1], viewport.upVector[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(target, eyePosition).normalize();\n newVec2.subVectors(target, center).normalize();\n const newVec3 = new THREE.Vector3();\n newVec3.crossVectors(newVec1, newVec2);\n const angle = newVec1.angleTo(newVec2);\n if (transitionTime > 0) {\n this.getZincCameraControls().rotateCameraTransition(newVec3,\n angle, transitionTime);\n this.getZincCameraControls().enableCameraTransition();\n } else {\n this.getZincCameraControls().rotateAboutLookAtpoint(newVec3, angle);\n }\n }\n }\n\n /**\n * Transition the camera into viewing the zinc object with a \n * smooth transition within the providied transitionTime.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.alignObjectToCameraView = (zincObject, transitionTime) => {\n if (this.objectIsInScene(zincObject)) {\n const boundingBox = zincObject.getBoundingBox();\n this.alignBoundingBoxToCameraView(boundingBox, transitionTime);\n }\n }\n\n /**\n * Set the camera to point to the centroid of the zinc object.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n */\n this.setCameraTargetToObject = zincObject => {\n if (this.objectIsInScene(zincObject)) {\n const center = new THREE.Vector3();\n const boundingBox = zincObject.getBoundingBox();\n const viewport = this.getZincCameraControls().getCurrentViewport();\n boundingBox.getCenter(center);\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(eyePosition, target);\n newVec2.addVectors(center, newVec1);\n viewport.eyePosition[0] = newVec2.x;\n viewport.eyePosition[1] = newVec2.y;\n viewport.eyePosition[2] = newVec2.z;\n viewport.targetPosition[0] = center.x;\n viewport.targetPosition[1] = center.y;\n viewport.targetPosition[2] = center.z;\n this.getZincCameraControls().setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Check if stereo effect is enabled.\n * @returns {Boolean}\n */\n this.isStereoEffectEnable = () => {\n return stereoEffectFlag;\n }\n\n /**\n * Remove a ZincObject from this scene if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this scene.\n */\n this.removeZincObject = zincObject => {\n rootRegion.removeZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * Update pickable objects list\n */\n this.updatePickableThreeJSObjects = () => {\n pickableObjectsList.splice(0, pickableObjectsList.length);\n rootRegion.getPickableThreeJSObjects(pickableObjectsList,\n this.displayMarkers, true);\n this.forcePickableObjectsUpdate = false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n //The list will only be updated if changes have been made\n //in region or a flag has been raise\n if (this.forcePickableObjectsUpdate || \n rootRegion.checkPickableUpdateRequred(true)) {\n this.updatePickableThreeJSObjects();\n }\n return pickableObjectsList;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n this.isWebGL2 = () => {\n return rendererIn.isWebGL2();\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n rootRegion.clear(true);\n sceneLoader.toBeDwonloaded = 0;\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * All time stamp to the metadata TimeStamps field.\n */\n this.addMetadataTimeStamp = (key, time) => {\n metadata[\"TimeStamps\"][key] = convertDurationObjectTomSec(time);\n }\n \n /**\n * Get a specific metadata field.\n */\n this.getMetadataTag = key => {\n return metadata[key];\n }\n\n /**\n * Get all metadata set for the scene.\n */\n this.getMetadata = () => {\n return metadata;\n }\n\n /**\n * Set a specific metadata field.\n */\n this.setMetadataTag = (key, value) => {\n metadata[key] = value;\n }\n\n /**\n * Remove a specific metadata field.\n */\n this.removeMetadataTag = key => {\n delete metadata[key];\n }\n\n /**\n * Reset all metadata fields to original value.\n */\n this.resetMetadata = () => {\n metadata = defaultMetadata();\n }\n\n /**\n * Reset duration of scene to default value.\n */\n this.resetDuration = () => {\n this.setDuration(defaultDuration);\n }\n\n // Turn the object into a readable string {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectToString = duration => {\n return [\n ...(duration.years ? [`${duration.years}years`] : []),\n ...(duration.months ? [`${duration.months}months`] : []),\n ...(duration.weeks ? [`${duration.weeks}weeks`] : []),\n ...(duration.days ? [`${duration.days}days`] : []),\n ...(duration.hours ? [`${duration.hours}hours`] : []),\n ...(duration.mins ? [`${duration.mins}mins`] : []),\n ...(duration.secs ? [`${duration.secs}secs`] : []),\n ].join(' ');\n }\n\n // Turn the object into a number representing milliesecond {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectTomSec = duration => {\n return duration.years ? duration.years * 31536000000 : 0 +\n duration.months ? duration.months * 2592000000 : 0 +\n duration.weeks ? duration.weeks * 604800000 : 0 +\n duration.days ? duration.days * 86400000 : 0 +\n duration.hours ? duration.hours * 3600000 : 0 +\n duration.mins ? duration.mins * 60000 : 0 +\n duration.secs ? duration.secs * 1000 : 0;\n }\n\n // Set the readable duration and timer using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n const millisec = convertDurationObjectTomSec(duration);\n this.setMetadataTag(\"Duration\", string);\n this.setDuration(millisec);\n }\n\n // Set the readable original duration using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setOriginalDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n this.setMetadataTag(\"OriginalDuration\", string);\n }\n\n /**\n * Export the scene in GLTF format, it can either return it in\n * string or binary form.\n * \n * @param {Boolean} binary - Indicate it should be exported as binary or\n * text.\n * \n * @return {Promise} The exported data if the promise resolve successfully\n */\n this.exportGLTF = (binary) => {\n const exporter = new SceneExporter(this);\n return exporter.exportGLTF(binary);\n }\n\n /**\n * Get the root region of the scene.\n * \n * @return {Region} Return the root region of the scene\n */\n this.getRootRegion = () => {\n return rootRegion;\n }\n}\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst STLLoader = require('./loaders/STLLoader').STLLoader;\nconst OBJLoader = require('./loaders/OBJLoader').OBJLoader;\nconst PrimitivesLoader = require('./loaders/primitivesLoader').PrimitivesLoader;\n\nconst createNewURL = (target, reference) => {\n let newURL = (new URL(target, reference)).href;\n //Make sure the target url does not contain parameters\n if (target && target.split(\"?\").length < 2) {\n const paramsStrings = reference.split(\"?\");\n //There are parameters, add them to the target\n if (paramsStrings.length === 2) {\n newURL = newURL + \"?\" + paramsStrings[1];\n }\n }\n return newURL;\n}\n\n/**\n * A helper class to help with reading / importing primitives and\n * settings into a {@link Scene}.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {SceneLoader}\n */\nexports.SceneLoader = function (sceneIn) {\n const scene = sceneIn;\n this.toBeDownloaded = 0;\n this.progressMap = [];\n let viewLoaded = false;\n let errorDownload = false;\n const primitivesLoader = new PrimitivesLoader();\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = finishCallback => {\n return xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n if (finishCallback) {\n finishCallback();\n }\n }\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.setupMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = createNewURL(value, referenceURL);\n promises.push(new Promise((resolve, reject) => {\n // Add parameters if we are sent them\n fetch(newURL)\n .then(response => response.json())\n .then(data => resolve({key: key, data: data}))\n .catch(data => reject(data));\n }));\n }\n }\n Promise.all(promises)\n .then(values => {\n const entries = {};\n values.forEach(entry => {\n entries[entry.key] = entry.data;\n });\n scene.setupMultipleViews(defaultView, entries);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.setCurrentViewport(defaultView);\n viewLoaded = true;\n });\n }\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = (url, finishCallback) => {\n this.toBeDownloaded += 1;\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4) {\n if(xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.setupMultipleViews(\"default\", { \"default\" : viewData });\n scene.resetView();\n viewLoaded = true;\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n } else {\n this.onError();\n }\n }\n }\n requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (region, urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n primitivesLoader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError(finishCallback));\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.SceneLoader.#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (targetRegion, jsonFilePrefix, finishCallback) => {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.loadView(viewData);\n const urls = [];\n const filename_prefix = jsonFilePrefix + \"_\";\n for (let i = 0; i < viewData.numberOfResources; i++) {\n const filename = filename_prefix + (i + 1) + \".json\";\n urls.push(filename);\n }\n this.loadModelsURL(targetRegion, urls, viewData.colour, viewData.opacity, viewData.timeEnabled, viewData.morphColour, finishCallback);\n }\n }\n requestURL = resolveURL(jsonFilePrefix + \"_view.json\");\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n //Internal loader for a regular zinc geometry.\n const linesloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newLines = new (require('./primitives/lines').Lines)();\n let material = undefined;\n if (materials && materials[0]) {\n material = new THREE.LineBasicMaterial({color:materials[0].color.clone()});\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n\n if (newLines) {\n newLines.createLineSegment(geometry, material, options);\n newLines.setName(groupName);\n newLines.anatomicalId = anatomicalId;\n newLines.setRenderOrder = renderOrder;\n region.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n\t let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n if (isInline) {\n var object = primitivesLoader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\n }\n }\n\n const loadGlyphset = (region, glyphsetData, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let displayLabels = (options && options.displayLabels) ? options.displayLabels : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n const newGlyphset = new (require('./primitives/glyphset').Glyphset)();\n newGlyphset.setDuration(scene.getDuration());\n newGlyphset.groupName = groupName;\n let myCallback = () => {\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGlyphset);\n }\n ++this.toBeDownloaded;\n if (isInline) {\n newGlyphset.load(glyphsetData, glyphurl, myCallback, isInline, displayLabels);\n }\n else {\n newGlyphset.load(glyphsetData, resolveURL(glyphurl), myCallback, isInline, displayLabels);\n }\n newGlyphset.anatomicalId = anatomicalId;\n newGlyphset.setRenderOrder(renderOrder);\n region.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (region, xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(region, glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for a regular zinc geometry.\n const pointsetloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 10, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n region.addZincObject(newPointset);\n newPointset.setDuration(scene.getDuration());\n newPointset.setRenderOrder(renderOrder);\n }\n geometry.dispose();\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newPointset);\n };\n }\n\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new STLLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined, finishCallback));\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined,finishCallback));\n }\n\n //Loader for the OBJ format, \n const objloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n finishCallback\n ) => {\n return object => {\n this.toBeDownloaded--;\n object.traverse(child => {\n if (child instanceof THREE.Mesh) {\n const zincGeometry = addMeshToZincGeometry(child, localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n if (zincGeometry.morph)\n zincGeometry.morph.name = groupName;\n zincGeometry.groupName = groupName;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n });\n };\n }\n\n /**\n * Load a geometry into this scene, this is a subsequent called from \n * {@link Zinc.Scene#loadMetadataURL}, although it can be used to read\n * in geometry into the scene externally.\n * \n * @param {String} url - regular json model file providing geometry.\n * @param {Boolean} timeEnabled - Indicate if geometry morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {STRING} fileFormat - name supported formats are STL, OBJ and JSON.\n * @param {Function} finishCallback - Callback function which will be called\n * once the geometry is succssfully loaded in.\n */\n const loadSurfaceURL = (region ,url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n let localTimeEnabled = 0;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let fileFormat = (options && options.fileFormat) ? options.fileFormat : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = primitivesLoader;\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n return;\n }\n }\n if (isInline) {\n const object = primitivesLoader.parse( url );\n\t\t\t(meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n primitivesLoader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincObject => {\n downloadedItem = downloadedItem + 1;\n if (zincObject && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincObject);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(scene);\n }\n if (downloadedItem == numberOfDownloaded) {\n if (viewLoaded === false)\n scene.viewAll();\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n }\n };\n };\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (isInline) {\n const object = primitivesLoader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError(finishCallback));\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (region, metaurl, glyphurl, groupName, finishCallback, options) => {\n const isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadGlyphset(region, metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(region, xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n /**\n * Add a user provided {THREE.Geometry} into the scene as zinc geometry.\n * \n * @param {Three.Geometry} geometry - The threejs geometry to be added as {@link Zinc.Geometry}.\n * @param {THREE.Color} color - Colour to be assigned to this geometry, overrided if materialIn is provided.\n * @param {Number} opacity - Opacity to be set for this geometry, overrided if materialIn is provided.\n * @param {Boolean} localTimeEnabled - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Boolean} localMorphColour - Set this to true if morph colour is present, overrided if materialIn is provided.\n * @param {Boolean} external - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Function} finishCallback - Callback once the geometry has been added succssfully.\n * @param {THREE.Material} materialIn - Material to be set for this geometry if it is present.\n * \n * @returns {Zinc.Geometry}\n */\n addZincGeometry = (\n region,\n geometryIn,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n finishCallback,\n materialIn,\n groupName\n ) => {\n let options = {};\n options.colour = colour;\n options.opacity = opacity;\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour\n const newGeometry = new (require('./primitives/geometry').Geometry)();\n newGeometry.createMesh(geometryIn, materialIn, options);\n if (newGeometry.morph) {\n newGeometry.setName(groupName);\n if (region) region.addZincObject(newGeometry);\n newGeometry.setDuration(scene.getDuration());\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (newGeometry.videoHandler)\n scene.setVideoHandler(newGeometry.videoHandler);\n return newGeometry;\n }\n return undefined;\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n anatomicalId,\n renderOrder,\n finishCallback\n ) => {\n return (geometry, materials) => {\n let material = undefined;\n if (materials && materials[0]) {\n material = materials[0];\n }\n const zincGeometry = addZincGeometry(region, geometry, colour, opacity, \n localTimeEnabled, localMorphColour, undefined, material, groupName, renderOrder);\n zincGeometry.anatomicalId = anatomicalId;\n zincGeometry.setRenderOrder(renderOrder);\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n };\n }\n\n //Turn ISO 8601 duration string into an array.\n const parseDuration = (durationString) => {\n const regex = /P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?)?$/;\n const [, years, months, weeks, days, hours, mins, secs] = \n durationString.match(regex);\n return {years: years,months: months, weeks: weeks, days: days,\n hours: hours, mins: mins, secs: secs };\n }\n\n //Load settings from metadata item.\n this.loadSettings = (item) => {\n if (item) {\n //duration uses the ISO 8601 standard - PnYnMnDTnHnMnS\n if (item.Duration) {\n const duration = parseDuration(item.Duration);\n scene.setDurationFromObject(duration);\n }\n if (item.OriginalDuration) {\n const duration = parseDuration(item.OriginalDuration);\n scene.setOriginalDurationFromObject(duration);\n }\n if (item.TimeStamps) {\n for (const key in item.TimeStamps) {\n const time = parseDuration(item.TimeStamps[key]);\n scene.addMetadataTimeStamp(key, time);\n }\n }\n }\n }\n\n //Function to process each of the graphical metadata item except for view and\n //settings.\n const readPrimitivesItem = (region, referenceURL, item, order, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = createNewURL(item.URL, referenceURL);\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n let groupName = item.GroupName;\n if (groupName === undefined || groupName === \"\") {\n groupName = \"_Unnamed\";\n }\n\n let options = {\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n compression: item.compression,\n renderOrder: order\n };\n \n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = createNewURL(item.GlyphGeometriesURL, referenceURL);\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(region, newURL, newGeometryURL, groupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = createNewURL(item.URL, referenceURL);\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n scene.setupMultipleViews(\"default\", { \"default\" : newURL});\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGLTF = (region, url, finishCallback, options) => {\n const GLTFToZincJSLoader = new (require('./loaders/GLTFToZincJSLoader').GLTFToZincJSLoader)();\n GLTFToZincJSLoader.load(scene, region, url, finishCallback, options);\n }\n\n let loadRegions = (currentRegion, referenceURL, regions, callback) => {\n if (regions.Primitives) {\n regions.Primitives.forEach(primitive => {\n let order = 1;\n if (primitive.Order)\n order = primitive.Order;\n readPrimitivesItem(currentRegion, referenceURL, primitive, order, callback);\n });\n }\n if (regions.Transformation) {\n currentRegion.setTransformation(regions.Transformation);\n }\n if (regions.Children) {\n for (const [regionName, value] of Object.entries(regions.Children)) {\n const childRegion = currentRegion.findOrCreateChildFromPath(regionName);\n if (childRegion) {\n loadRegions(childRegion, referenceURL, value, callback);\n }\n }\n }\n }\n\n let getNumberOfDownloadsInArray = (array, includeViews) => {\n if (Array.isArray(array)) {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i].Type && (\n (includeViews && array[i].Type === \"View\") ||\n array[i].Type === \"Surfaces\" ||\n array[i].Type === \"Glyph\" ||\n array[i].Type === \"Points\" ||\n array[i].Type === \"Lines\"))\n {\n count++;\n }\n }\n return count;\n }\n return 0;\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? \n getNumberOfDownloadsInArray(regionJson.Primitives, false) : 0;\n if (regionJson.Children) {\n Object.values(regionJson.Children).forEach(childRegion => {\n counts += getNumberOfObjectsInRegions(childRegion);\n });\n }\n return counts;\n }\n\n let getNumberOfObjects = (metadata) => {\n if (Array.isArray(metadata)) {\n return getNumberOfDownloadsInArray(metadata, true);\n } else if ((typeof metadata) === \"object\" && metadata !== null) {\n if (metadata.Version === \"2.0\") {\n return getNumberOfObjectsInRegions(metadata.Regions);\n }\n }\n }\n\n let readVersionOneRegionPath = (region, referenceURL, item, order, callback) => {\n let targetRegion = region;\n if (item.RegionPath && item.RegionPath !== \"\") {\n targetRegion = region.findOrCreateChildFromPath(item.RegionPath);\n }\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, item, order * 2, callback);\n }\n\n let loadVersionOne = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (let i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, metadata[i], callback);\n for (let i = 0; i < metadata.length; i++) {\n readVersionOneRegionPath(targetRegion, referenceURL, metadata[i], i, callback);\n }\n }\n\n let loadVersionTwo = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n if (metadata.Settings)\n this.loadSettings(metadata.Settings);\n if (metadata.Views)\n loadMultipleViews(referenceURL, metadata.Views, referenceURL);\n if (metadata.Regions)\n loadRegions(targetRegion, referenceURL, metadata.Regions, callback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (targetRegion, url, finishCallback, allCompletedCallback) => {\n const xmlhttp = new XMLHttpRequest();\n var requestURL = resolveURL(url);\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n scene.resetMetadata();\n scene.resetDuration();\n viewLoaded = false;\n let referenceURL = xmlhttp.responseURL;\n if (referenceURL === undefined)\n referenceURL = (new URL(requestURL)).href;\n const metadata = JSON.parse(xmlhttp.responseText);\n if (Array.isArray(metadata)) {\n loadVersionOne(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.Version == \"2.0\") {\n loadVersionTwo(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n }\n }\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolors[ componentIdx ] = r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 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// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet line = '', lineFirstChar = '';\n\t\tlet lineLength = 0;\n\t\tlet result = [];\n\n\t\t// Faster to just trim left side of the line. Use if available.\n\t\tconst trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tline = lines[ i ];\n\n\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\tlineLength = line.length;\n\n\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( /\\s+/ );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\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// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\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} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( /\\s+/ );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","const JSONLoader = require('./JSONLoader').JSONLoader;\n\nexports.PrimitivesLoader = function () {\n let concurrentDownloads = 0;\n const MAX_DOWNLOAD = 20;\n this.crossOrigin = \"Anonymous\";\n const loader = new JSONLoader();\n const waitingList = [];\n\n this.load = (url, onLoad, onProgress, onError) => {\n if (MAX_DOWNLOAD > concurrentDownloads) {\n ++concurrentDownloads;\n loader.crossOrigin = this.crossOrigin;\n const onLoadCallback = new onFinally(onLoad, this);\n const onErrorCallback = new onFinally(onError, this);\n loader.load(url, onLoadCallback, onProgress, onErrorCallback);\n } else {\n waitingList.push({\n url,\n onLoad,\n onProgress,\n onError\n });\n }\n }\n\n this.loadFromWaitingList = () => {\n const item = waitingList.shift();\n if (item)\n this.load(item.url, item.onLoad, item.onProgress, item.onError);\n }\n\n const onFinally = function(callback, loader) {\n return (...args) => {\n --concurrentDownloads;\n callback(...args);\n loader.loadFromWaitingList();\n }\n }\n\n\n this.parse = data => {\n return loader.parse(data);\n }\n\n}\n","const THREE = require('three');\n\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nconst GLTFToZincJSLoader = function () {\n\n const _this = this;\n\n this.parseGLTFObjects = (object, region, depth, finishCallback) => {\n let childRegion = region;\n if (depth !== 0) {\n if (object.type === \"Object3D\") {\n if (object.name !== \"\") {\n if (region)\n childRegion = region.findOrCreateChildFromPath(object.name);\n if (childRegion) {\n const group = childRegion.getGroup();\n group.position.copy(object.position);\n group.rotation.copy(object.rotation);\n group.quaternion.copy(object.quaternion);\n group.matrixAutoUpdate = true;\n }\n }\n } else {\n let zincGeometry = undefined;\n if (object.type === \"Mesh\") {\n zincGeometry = new (require('../primitives/geometry').Geometry)();\n } else if (object.type === \"LineSegments\") {\n zincGeometry = new (require('../primitives/lines').Lines)();\n } else if (object.type === \"Points\") {\n zincGeometry = new (require('../primitives/pointset').Pointset)();\n }\n if (zincGeometry) {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (object.geometry && object.geometry.morphAttributes) {\n localTimeEnabled = object.geometry.morphAttributes.position ? true : false;\n localMorphColour = object.geometry.morphAttributes.color ? true : false;\n }\n zincGeometry.setMesh(object.clone(), localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n zincGeometry.morph.matrixAutoUpdate = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n }\n }\n depth++;\n object.children.forEach( child => {\n _this.parseGLTFObjects(child, childRegion, depth, finishCallback);\n });\n }\n\n this.setCamera = scene => {\n scene.viewAll();\n const cameraControls = scene.getZincCameraControls();\n const viewport = cameraControls.getCurrentViewport();\n cameraControls.addViewport('default', viewport);\n cameraControls.setDefaultViewport('default');\n }\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.load = (scene, region, url, finishCallback, allCompletedCallback, options) => {\n const path = url.substring(0, url.lastIndexOf(\"/\") + 1);\n const filename = url.substring(url.lastIndexOf(\"/\") + 1, url.length);\n const loader = new GLTFLoader().setPath(path);\n \n loader.load( filename, function ( gltf ) {\n console.log(gltf)\n _this.parseGLTFObjects(gltf.scene, region, 0, finishCallback);\n _this.setCamera(scene);\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n });\n }\n}\n\nexports.GLTFToZincJSLoader = GLTFToZincJSLoader;\n","module.exports = require(\"three/examples/jsm/loaders/GLTFLoader\");","const GLTFExporter = require('./three/GLTFExporter').GLTFExporter;\n\n/**\n * Provides an object which uses for exporting the scene\n * \n * @class\n * @author Alan Wu\n * @return {SceneExporter}\n */\nconst SceneExporter = function (sceneIn) {\n const scene = sceneIn;\n\n\tthis.exportGLTF = (binary) => {\n const rootRegion = scene.getRootRegion();\n const zincObjects = rootRegion.getAllObjects(true);\n const animations = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.animationClip) {\n animations.push({clip: zincObject.animationClip[0], mesh: zincObject.morph});\n }\n });\n const exporter = new GLTFExporter();\n const options = { binary, animations };\n return new Promise((resolve, reject) => {\n exporter.parse( scene.getThreeJSScene(), function ( gltf ) {\n resolve(gltf);\n }, options );\n });\n\t}\n}\n\nexports.SceneExporter = SceneExporter;\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRGBFormat,\n\tRepeatWrapping,\n\tScene,\n\tVector3\n} from 'three';\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsPBRSpecularGlossiness( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tUNSIGNED_BYTE: 0x1401,\n\tUNSIGNED_SHORT: 0x1403,\n\tFLOAT: 0x1406,\n\tUNSIGNED_INT: 0x1405,\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\tif ( window.TextEncoder !== undefined ) {\n\n\t\treturn new TextEncoder().encode( text ).buffer;\n\n\t}\n\n\tconst array = new Uint8Array( new ArrayBuffer( text.length ) );\n\n\tfor ( let i = 0, il = text.length; i < il; i ++ ) {\n\n\t\tconst value = text.charCodeAt( i );\n\n\t\t// Replacing multi-byte character with space(0x20).\n\t\tarray[ i ] = value > 0xFF ? 0x20 : value;\n\n\t}\n\n\treturn array.buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nlet cachedCanvas = null;\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\t\tthis.extensionsUsed = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter'\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\twrite( input, onDone, options ) {\n\n\t\tthis.options = Object.assign( {}, {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\ttruncateDrawRange: true,\n\t\t\tembedImages: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tconst writer = this;\n\n\t\tPromise.all( this.pending ).then( function () {\n\n\t\t\tconst buffers = writer.buffers;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\t\t// Merge buffers.\n\t\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t\t// Declare extensions.\n\t\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\n\t\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\n\t\t\t// Update bytelength of the single buffer.\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\treader.readAsArrayBuffer( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t// Binary chunk.\n\t\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t\t// JSON chunk.\n\t\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t\t// GLB header.\n\t\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\t\theader,\n\t\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\t\tjsonChunk,\n\t\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\t\tbinaryChunk\n\t\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\t\tconst glbReader = new window.FileReader();\n\t\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\t\tonDone( glbReader.result );\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 ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\t\tonDone( json );\n\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n if (object.userData && object.userData.isZincObject) return;\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Assign and return a temporal unique id for an object\n\t * especially which doesn't have .uuid\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( object ) {\n\n\t\tif ( ! this.uids.has( object ) ) this.uids.set( object, this.uid ++ );\n\n\t\treturn this.uids.get( object );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tif ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\tcomponentSize = 1;\n\n\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\tcomponentSize = 2;\n\n\t\t} else {\n\n\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = attribute.itemSize * componentSize;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise<Integer>}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst options = this.options;\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array (float, uint or ushort)\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type.' );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined ) count = attribute.count;\n\n\t\t// @TODO Indexed buffer geometry with drawRange not supported yet\n\t\tif ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {\n\n\t\t\tconst end = start + count;\n\t\t\tconst end2 = geometry.drawRange.count === Infinity\n\t\t\t\t? attribute.count\n\t\t\t\t: geometry.drawRange.start + geometry.drawRange.count;\n\n\t\t\tstart = Math.max( start, geometry.drawRange.start );\n\t\t\tcount = Math.min( end, end2 ) - start;\n\n\t\t\tif ( count < 0 ) count = 0;\n\n\t\t}\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)\n\t * @param {Boolean} flipY before writing out the image\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY ) {\n\n\t\tconst writer = this;\n\t\tconst cache = writer.cache;\n\t\tconst json = writer.json;\n\t\tconst options = writer.options;\n\t\tconst pending = writer.pending;\n\n\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\tconst cachedImages = cache.images.get( image );\n\t\tconst mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';\n\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\tif ( ! json.images ) json.images = [];\n\n\t\tconst imageDef = { mimeType: mimeType };\n\n\t\tif ( options.embedImages ) {\n\n\t\t\tconst canvas = cachedCanvas = cachedCanvas || document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d' );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t} else {\n\n\t\t\t\tif ( format !== RGBAFormat && format !== RGBFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tif ( format === RGBAFormat ) {\n\n\t\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ j + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ j + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ j + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = 255;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push( new Promise( function ( resolve ) {\n\n\t\t\t\t\tcanvas.toBlob( function ( blob ) {\n\n\t\t\t\t\t\twriter.processBufferViewImage( blob ).then( function ( bufferViewIndex ) {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\t\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, mimeType );\n\n\t\t\t\t} ) );\n\n\t\t\t} else {\n\n\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\timageDef.uri = image.src;\n\n\t\t}\n\n\t\tconst index = json.images.push( imageDef ) - 1;\n\t\tcachedImages[ key ] = index;\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tif ( material.metalnessMap === material.roughnessMap ) {\n\n\t\t\t\tconst metalRoughMapDef = { index: this.processTexture( material.metalnessMap ) };\n\t\t\t\tthis.applyTextureTransform( metalRoughMapDef, material.metalnessMap );\n\t\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = { index: this.processTexture( material.map ) };\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\t// note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.\n\t\t\tconst emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 1 ) {\n\n\t\t\t\temissive.multiplyScalar( 1 / maxEmissiveComponent );\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );\n\n\t\t\t}\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = { index: this.processTexture( material.normalMap ) };\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== - 1 ) {\n\n\t\t\t\tif ( material.normalScale.x !== material.normalScale.y ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Normal scale components are different, ignoring Y and exporting X.' );\n\n\t\t\t\t}\n\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: 1\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tif ( geometry.isBufferGeometry !== true ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv2: 'TEXCOORD_1',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.substr( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n \n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' && attributeName !== 'color' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\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\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tlet gltfAttributeName = attributeName.toUpperCase();\n\n if ( nameConversion[ attributeName ] ) {\n\n gltfAttributeName = nameConversion[ attributeName ];\n\n }\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = baseAttribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n if (baseAttribute) {\n \n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n if (baseAttribute.count > j) {\n\n relativeAttribute.setXYZ(\n j,\n attribute.getX( j ) - baseAttribute.getX( j ),\n attribute.getY( j ) - baseAttribute.getY( j ),\n attribute.getZ( j ) - baseAttribute.getZ( j )\n );\n\n }\n\n }\n\n } else {\n\n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n relativeAttribute.setXYZ(\n j,\n 0,\n 0,\n 0\n );\n\n }\n\n }\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array<THREE.Object3D>} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ].clip, options.animations[i].mesh);\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * - 1.0;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n */\nclass GLTFMaterialsPBRSpecularGlossiness {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_pbrSpecularGlossiness';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isGLTFSpecularGlossinessMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorFactor ) {\n\n\t\t\textensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;\n\n\t\t}\n\n\t\tconst specularFactor = [ 1, 1, 1 ];\n\t\tmaterial.specular.toArray( specularFactor, 0 );\n\t\textensionDef.specularFactor = specularFactor;\n\t\textensionDef.glossinessFactor = material.glossiness;\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorTexture ) {\n\n\t\t\textensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tconst specularMapDef = { index: writer.processTexture( material.specularMap ) };\n\t\t\twriter.applyTextureTransform( specularMapDef, material.specularMap );\n\t\t\textensionDef.specularGlossinessTexture = specularMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\n\n/**\n * Object with containg viewport information used in ZincJS.\n * \n * @class\n * @author Alan Wu\n * @return {Viewport}\n */\nconst Viewport = function () {\n /** @property {Number} */\n\tthis.nearPlane = 0.168248;\n /** @property {Number} */\n\tthis.farPlane = 6.82906;\n /**@property {Array} */\n\tthis.eyePosition = [0.5, -2.86496, 0.5];\n /** @property {Array} */\n\tthis.targetPosition = [0.5, 0.5, 0.5];\n /** @property {Array} */\n\tthis.upVector = [ 0.0, 0.0, 1.0];\n\tconst _this = this;\n\n this.setFromObject = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector }) => {\n _this.nearPlane = nearPlane;\n _this.farPlane = farPlane;\n _this.eyePosition = eyePosition;\n _this.targetPosition = targetPosition;\n _this.upVector = upVector;\n }\n};\n\n/**\n * Provides the basic controls for a scene.\n * \n * @class\n * @author Alan Wu\n * @return {CameraControls}\n */\nconst CameraControls = function ( object, domElement, renderer, scene ) {\n\tconst MODE = { NONE: -1, DEFAULT: 0, PATH: 1, SMOOTH_CAMERA_TRANSITION: 2, AUTO_TUMBLE: 3, ROTATE_TRANSITION: 4, MINIMAP: 5, SYNC_CONTROL: 6 };\n /** \n * Actions states.\n * Available states are NONE, ROTATE, ZOOM, PAN, TOUCH_ROTATE, TOUCH_ZOOM, TOUCH_PAN and SCROLL.\n * @property {Object} \n */\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6 };\n const ROTATE_DIRECTION = { NONE: -1, FREE: 1, HORIZONTAL: 2, VERTICAL: 3 };\n /** \n * Available click actions are MAIN, AUXILIARY and SECONARY.\n * @property {Object} \n */\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.scrollRate = 50;\n\tlet duration = 6000;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tlet defaultViewport = \"default\";\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet mouseScroll = 0;\n let rotateMode = ROTATE_DIRECTION.FREE;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n const sceneSphere = new THREE.Sphere();\n const _tempEye = new THREE.Vector3();\n let ndcControl = undefined;\n let maxDist = 0;\n const viewports = {\n \"default\" : new Viewport()\n };\n viewports.default.nearPlane = 0.1;\n\tviewports.default.farPlane = 2000;\n\tviewports.default.eyePosition = [0, 0, 0];\n\tviewports.default.targetPosition = [0, 0, -1.0];\n\tviewports.default.upVector = [ 0.0, 1.0, 0.0];\n\n //Add the target property\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( ...viewports.default.targetPosition );\n\n //Calculate the max distanc allowed, it is the longer\n //of 6 times the radius of the current scene and\n //the current distance between scene centroid and the postion\n //of the camera.\n this.calculateMaxAllowedDistance = (scene) => {\n const box = scene.getBoundingBox();\n if (box) {\n box.getBoundingSphere(sceneSphere);\n maxDist = sceneSphere.radius * 6;\n let currentDist = 0;\n if (this.cameraObject) {\n currentDist = this.cameraObject.position.distanceTo(sceneSphere.center);\n }\n maxDist = currentDist > maxDist ? currentDist : maxDist;\n } else {\n maxDist = 0;\n }\n }\n\n /**\n * Add a viewport to the list of available named viewports.\n * \n * @param {String} name - Name of the viewport\n * @param {Viewport} viewportName - Viewport to be added\n */\n this.addViewport = (viewportName, viewport) => {\n if (viewportName && viewport)\n viewports[viewportName] = viewport;\n }\n\n /**\n * Set the default viewport for this {@link CameraControls}.\n * \n * @param {String} defaultName - Name of the viewport\n * \n * @return {Boolean} true if set successfully, false otherwise.\n */\n this.setDefaultViewport = defaultName => {\n\t\tif (defaultName && (defaultName in viewports)) {\n defaultViewport = defaultName;\n return true;\n }\n return false\n\t}\n\n /**\n * Get the name of the default viewport.\n * \n * \n * @return {String}\n */\n this.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\n /**\n * Get the viewport with the provied name stored in this object.\n * @param {String} name - Name of the viewport\n * \n * @return {Viewport}\n */\n\tthis.getViewportOfName = name => {\n\t\treturn viewports[name];\n\t}\n\n /**\n * Set the viewport with a name if it is found in the list.\n * @param {String} name - Name of the viewport\n * \n * @return {Boolean} if viewport is found and set, otherwise false.\n */\n this.setCurrentViewport = name => {\n if (name in viewports) {\n this.setCurrentCameraSettings(viewports[name])\n return true;\n }\n return false;\n\t}\n\n /**\n * Set the direction of rotation allowed with this control.\n * \n * @param {String} mode - available options are none, horizontal,\n * vertical and free.\n */\n this.setRotationMode = mode => {\n switch (mode) {\n case \"none\":\n rotateMode = ROTATE_DIRECTION.NONE;\n break;\n case \"horizontal\":\n rotateMode = ROTATE_DIRECTION.HORIZONTAL;\n break;\n case \"vertical\":\n rotateMode = ROTATE_DIRECTION.VERTICAL;\n break;\n case \"free\":\n default:\n rotateMode = ROTATE_DIRECTION.FREE;\n }\n }\n\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n if (ndcControl)\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n\t}\n\n /**\n * Get normalised coordinates from windows coordinates.\n * \n * @param {String} x\n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the normalised x and y coordinates.\n */\n this.getNDCFromDocumentCoords = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n const out_x = ((x - rect.left) / rect.width) * 2 - 1;\n const out_y = -((y - rect.top) / rect.height) * 2 + 1;\n return position.set(out_x, out_y);\n }\n\n /**\n * Get the relative windows coordinates from normalised coordiantes.\n * \n * @param {String} x \n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the relative x and y coordinates.\n */\n this.getRelativeCoordsFromNDC = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n position.x = (x + 1) * rect.width / 2.0;\n position.y = (1 - y) * rect.height / 2.0;\n return position;\n }\n\n /**\n * Map a mouse click to the specified action.\n * \n * @param {String} buttonName - please see {@link CLICK_ACTION}\n * @param {String} actionName - please see {@link STATE}\n */\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n\n //Make sure the camera does not travel beyond limit\n const checkTravelDistance = () => {\n if (maxDist > 0) {\n const newDist = _tempEye.distanceTo(sceneSphere.center);\n return (maxDist > newDist || \n this.cameraObject.position.distanceTo(sceneSphere.center) > newDist );\n }\n return true;\n }\n \n const translateViewport = translation => {\n _tempEye.copy(this.cameraObject.position).add(translation);\n if (checkTravelDistance()) {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n }\n\t\n\tconst onDocumentMouseDown = event => {\n updateRect(false);\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n updateRect(false);\n\t\tthis.pointer_x = event.clientX - rect.left;\n\t\tthis.pointer_y = event.clientY - rect.top;\n if (currentMode === MODE.MINIMAP) {\n let minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n if (minimapCoordinates) {\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n } else {\n if ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n zincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n }\n }\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n updateRect(false);\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n const onDocumentEnter = () => {\n\t\tupdateRect(true);\n\t}\n\n const updateRect = forced => {\n //Use intersectionObserver to reset the rect for ray tracing.\n if (forced || rect === undefined) {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n rect = entry.boundingClientRect;\n }\n observer.disconnect();\n });\n \n observer.observe(this.domElement);\n }\n }\n\t\n\tconst onDocumentWheelEvent = event => {\n updateRect(false);\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.scrollRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.scrollRate * -1;\n\t\tmouseScroll = mouseScroll + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n /**\n * Rotate around the axis with the amount specified by angle.\n * \n * @param {THREE.Vector3} axis - The rotational axis.\n * @param {Number} Angle - Specify how much the camera shoudl rotate by.\n */\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n\t\t\tconst height = rect.height;\n\t\t\tif ((0<width)&&(0<height))\n\t\t\t{\n\t\t\t\tconst radius=0.25*(width+height);\n\t\t\t\tlet delta_x = 0;\n\t\t\t\tlet delta_y = 0;\n if (rotateMode === ROTATE_DIRECTION.FREE ||\n rotateMode === ROTATE_DIRECTION.HORIZONTAL)\n\t\t\t\t delta_x=this.pointer_x-this.previous_pointer_x;\n if (rotateMode === ROTATE_DIRECTION.FREE ||\n rotateMode === ROTATE_DIRECTION.VERTICAL)\n\t\t\t\t delta_y=this.previous_pointer_y-this.pointer_y;\n\t\t\t\tconst tangent_dist = Math.sqrt(delta_x*delta_x + delta_y*delta_y);\n\t\t\t\tif (tangent_dist > 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n let d = 0;\n // Do not allow rotation on other direction around the origin if rotateMode is not free\n if (rotateMode === ROTATE_DIRECTION.FREE) {\n let d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n if (d > radius)\t{\n d = radius;\n }\n else {\n if (d < -radius) {\n d = -radius;\n }\n }\n }\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if (this._state === STATE.SCROLL) {\n\t\t\tdelta = mouseScroll;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.scrollRate;\n this.changeZoomByValue(delta_y);\n }\n\n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n const height = rect.height;\n\n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\n\t\t\tconst dy = 1.5 * delta_y/height;\n\t\t\tif ((dist + dy*dist) > 0.01) {\n\t\t\t\ta.normalize()\n _tempEye.copy(this.cameraObject.position);\n\t\t\t\t_tempEye.x += a.x*dy*dist;\n\t\t\t\t_tempEye.y += a.y*dy*dist;\n\t\t\t\t_tempEye.z += a.z*dy*dist;\n if (checkTravelDistance()) {\n this.cameraObject.position.copy(_tempEye);\n this.updateDirectionalLight();\n const near_far_minimum_ratio = 0.00001;\n if ((near_far_minimum_ratio * this.cameraObject.far) <\n (this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n if (this.near_plane_fly_debt != 0.0)\t{\n this.near_plane_fly_debt += dy*dist;\n if (this.near_plane_fly_debt > 0.0) {\n this.cameraObject.near += this.near_plane_fly_debt;\n this.cameraObject.far += this.near_plane_fly_debt;\n this.near_plane_fly_debt = 0.0;\n }\n else {\n this.cameraObject.near += dy*dist;\n this.cameraObject.far += dy*dist;\n }\n }\t\t\t\n }\n else {\n if (this.near_plane_fly_debt == 0.0) {\n const diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.far -= diff;\n this.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n }\n this.near_plane_fly_debt += dy*dist;\n }\n }\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y = calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif (this._state === STATE.SCROLL) {\n\t\t\tmouseScroll = 0;\n this._state = STATE.NONE;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\n /**\n * Force an update to the position of the directional light.\n */\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t/**\n * Enable the camera control.\n */\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n this.domElement.addEventListener( 'mouseenter', onDocumentEnter, false );\n\t }\n\t}\n\n /**\n * Disable the camera control.\n */\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n this.domElement.removeEventListener( 'mouseenter', onDocumentEnter, false );\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n /**\n * This is an experimental feature. It loads a path - point to point which\n * the camera will travel.\n * \n * @param {String} path_url - The path.\n * @param {requestCallback} finishCallback - The callback once the path is load.\n */\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\trequestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\n /**\n * Set the duration for the camera to travel along the path.\n * \n * @param {Number} durationIn - the duration for the path.\n */\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n /**\n * Get the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @return {Number}\n */\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n /**\n * Set the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @param {Number} playRateIn - The play rate speed.\n */\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\n /**\n * Update the internal timer by the set amount, this can\n * be used to force a time update by setting delta to zero.\n * \n * @param {Number} delta - The amount of time to increment\n * the time by.\n */\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n /**\n * Get the current inbuild time,\n * \n * @return {Number}\n */\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n /**\n * Set the current inbuild time,\n * \n * @param {Number} timeIn - this will be used as the current time,\n * it should be between the range of zero and the set duration.\n */\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n /**\n * Get the number of frame which is determine by number of points\n * in the camera path.\n * \n * @return {Number}\n */\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\n /**\n * Get the current time frame and it will return three values in\n * an array.\n * \n * @return {Array} - bottom frame, top frame and the proportion.\n */\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n /**\n * Set the current time frame.\n * \n * @param {Number} targetTimeFrame - bottom frame, top frame and the proportion.\n */\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n /**\n * Update the progress on the path by the specified amount - delta.\n * \n * @param {Number} delta - The amount of time to increment\n */\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n /**\n * Force recalculation of the current path.\n */\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\n // handle synchronised control based on information in the idc\n const handleSyncControl = () => {\n if ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n //rotateion does not trigger callback\n tumble();\n } else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n translate();\n ndcControl.triggerCallback();\n } else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n ndcControl.zoom(calculateZoomDelta());\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y = this.pointer_y;\n if (this._state === STATE.SCROLL) {\n this._state = STATE.NONE;\n }\n mouseScroll = 0;\n ndcControl.triggerCallback();\n }\n }\n\t\n /**\n * Update all controls related changes - including calculation of the viewport.\n * \n * @param {Number} timeChanged - Time eclipse since last called.\n */\n\tthis.update = timeChanged => {\n\t\tconst delta = timeChanged * playRate;\n\t\tlet controlEnabled = enabled;\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdatePath(delta);\n\t\t} else if (currentMode === MODE.SMOOTH_CAMERA_TRANSITION && smoothCameraTransitionObject) {\n\t\t\tsmoothCameraTransitionObject.update(delta);\n\t\t\tif (smoothCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\tsmoothCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.ROTATE_CAMERA_TRANSITION && rotateCameraTransitionObject) {\n\t\t\trotateCameraTransitionObject.update(delta);\n\t\t\tif (rotateCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\trotateCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject) {\n\t\t\tcameraAutoTumbleObject.update(delta);\n\t\t} else if (currentMode === MODE.SYNC_CONTROL && ndcControl) {\n handleSyncControl();\n controlEnabled = false;\n }\n\t\tif (controlEnabled) {\n\t\t\tif ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n\t\t\t\ttumble();\n\t\t\t} else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n\t\t\t\ttranslate();\n\t\t\t} else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n\t\t\t\tflyZoom();\n\t\t\t}\n\t\t\tif (this._state !== STATE.NONE) {\n\t\t\t\tif (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject &&\n\t\t\t\t\t\tcameraAutoTumbleObject.stopOnCameraInput) {\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._state === STATE.SCROLL)\n\t\t\t\tthis._state = STATE.NONE;\n\t\t}\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.update();\n\t\t\t//this.directionalLight.target.position.set(this.cameraObject.target.x, \n\t\t\t//\tthis.cameraObject.target.y, this.cameraObject.target.z);\n\t\t} else {\n\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t}\n\t};\n\t\n /**\n * Switch to path mode and begin traveling through the camera path.\n */\n\tthis.playPath = () => {\n\t\tcurrentMode = MODE.PATH;\n\t}\n\n /**\n * Stop playing path and switch back to normal control.\n */\n\tthis.stopPath = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n /**\n * Check rather the control is currently in path mode.\n * \n * @return {Boolean}\n */\n\tthis.isPlayingPath = () => {\n\t\treturn (currentMode === MODE.PATH);\n\t}\n\t\n /**\n * Enable directional light update as the camera\n * is traveling through path.\n * \n * @param {Boolean} flag\n */\n\tthis.enableDirectionalLightUpdateWithPath = flag => {\n\t\tupdateLightWithPathFlag = flag;\n\t}\n\t\n /**\n * Enable rotation using the devices's accelerometer.\n */\n\tthis.enableDeviceOrientation = () => {\n\t\tif (!deviceOrientationControl)\n\t\t\tdeviceOrientationControl = new ModifiedDeviceOrientationControls(this.cameraObject);\n\t}\n\n /**\n * Disable rotation using the devices's accelerometer.\n */\n\tthis.disableDeviceOrientation = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.dispose();\n\t\t\tdeviceOrientationControl = undefined;\n\t\t}\n\t}\n\n /**\n * Check rather device orientation based on accelerometer is on.\n */\n\tthis.isDeviceOrientationEnabled = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n /**\n * Reset the viewport settings to the one provided by default viewport.\n */\n\tthis.resetView = () => {\n const viewport = viewports[defaultViewport];\n\t\tthis.cameraObject.near = viewport.nearPlane;\n\t\tthis.cameraObject.far = viewport.farPlane;\n\t\tthis.cameraObject.position.set( viewport.eyePosition[0], viewport.eyePosition[1],\n viewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( viewport.upVector[0], viewport.upVector[1],\n viewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n /**\n * Set the current camera settings with the provided viewport.\n * \n * @param {Viewport} newViewport - viewport settings.\n */\n\tthis.setCurrentCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tthis.cameraObject.near = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tthis.cameraObject.far = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tthis.cameraObject.position.set( newViewport.eyePosition[0], \n\t\t\t\t\tnewViewport.eyePosition[1], newViewport.eyePosition[2]);\n\t\tif (newViewport.targetPosition)\n\t\t\tthis.cameraObject.target.set( newViewport.targetPosition[0],\n\t\t\t\t\tnewViewport.targetPosition[1], newViewport.targetPosition[2] );\n\t\tif (newViewport.upVector)\n\t\t\tthis.cameraObject.up.set( newViewport.upVector[0], newViewport.upVector[1],\n\t\t\t\t\tnewViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n /**\n * Get the viewport based on centre, radius, view_angle and clip distance.\n * \n * @param {Number} centreX - x coordinate of the centre.\n * @param {Number} centreY - y coordinate of the centre.\n * @param {Number} centreZ - z coordinate of the centre.\n * @param {Number} radius - radius if the viewport.\n * @param {Number} view_angle - view angle.\n * @param {Number} clip_distance - clip_distance between the near and far plane.\n * \n * @return {Viewport}\n */\t\n\tthis.getViewportFromCentreAndRadius = (centreX, centreY, centreZ, radius, view_angle, clip_distance) => {\n\t\tlet eyex = this.cameraObject.position.x-this.cameraObject.target.x;\n\t\tlet eyey = this.cameraObject.position.y-this.cameraObject.target.y;\n\t\tlet eyez = this.cameraObject.position.z-this.cameraObject.target.z;\n\t\tconst fact = 1.0/Math.sqrt(eyex*eyex+eyey*eyey+eyez*eyez);\n\t\teyex = eyex * fact;\n\t\teyey = eyey * fact;\n\t\teyez = eyez * fact;\n\t\t/* look at the centre of the sphere */\n\t\tconst localTargetPosition = [centreX, centreY, centreZ];\n\t\t/* shift the eye position to achieve the desired view_angle */\n\t\tconst eye_distance = radius/Math.tan(view_angle*Math.PI/360.0);\n\t\tconst localEyePosition = [ centreX + eyex*eye_distance, centreY + eyey*eye_distance,\n\t\t centreZ + eyez*eye_distance];\n\t\tconst localFarPlane = eye_distance+clip_distance;\n\t\tlet localNearPlane = 0.0;\n\t\tconst nearClippingFactor = 0.95;\n\t\tif (clip_distance > nearClippingFactor*eye_distance)\n\t\t{\n\t\t\tlocalNearPlane = (1.0 - nearClippingFactor)*eye_distance;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlocalNearPlane = eye_distance - clip_distance;\n\t\t}\n\t\tconst newViewport = new Viewport();\n\t\tnewViewport.nearPlane = localNearPlane;\n\t\tnewViewport.farPlane = localFarPlane;\n\t\tnewViewport.eyePosition = localEyePosition;\n\t\tnewViewport.targetPosition = localTargetPosition;\n\t\tnewViewport.upVector = [this.cameraObject.up.x, this.cameraObject.up.y,\n\t\t this.cameraObject.up.z];\n\t\t\n\t\treturn newViewport;\n\t}\n\n /**\n * Get the current camera viewport.\n * \n * @return {Viewport}\n */\n\tthis.getCurrentViewport = () => {\n\t\tconst currentViewport = new Viewport();\n\t\tcurrentViewport.nearPlane = this.cameraObject.near;\n\t\tcurrentViewport.farPlane = this.cameraObject.far;\n\t\tcurrentViewport.eyePosition[0] = this.cameraObject.position.x;\n\t\tcurrentViewport.eyePosition[1] = this.cameraObject.position.y;\n\t\tcurrentViewport.eyePosition[2] = this.cameraObject.position.z;\n\t\tcurrentViewport.targetPosition[0] = this.cameraObject.target.x;\n\t\tcurrentViewport.targetPosition[1] = this.cameraObject.target.y;\n\t\tcurrentViewport.targetPosition[2] = this.cameraObject.target.z;\n\t\tcurrentViewport.upVector[0] = this.cameraObject.up.x;\n\t\tcurrentViewport.upVector[1] = this.cameraObject.up.y;\n\t\tcurrentViewport.upVector[2] = this.cameraObject.up.z;\n\t\treturn currentViewport;\n\t}\n\t\n\tthis.getDefaultEyePosition = () => {\n\t\treturn eyePosition;\n\t}\n\t\n\tthis.getDefaultTargetPosition = () => {\n\t\treturn targetPosition;\n\t}\n\n /**\n * Setup a smooth transition object which transition the camera from one \n * viewport to the other in the specified duration. This will not work if \n * {@link rotateCameraTransition} is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {Viewport} startingViewport - the starting viewport\n * @param {Viewport} endingViewport - the viewport ti end the transistion with.\n * @param {Number} durationIn - duration of the smooth transition.\n */\n\tthis.cameraTransition = (startingViewport, endingViewport, durationIn) => {\n\t if (rotateCameraTransitionObject == undefined)\n\t smoothCameraTransitionObject = new SmoothCameraTransition(startingViewport, endingViewport,\n\t this, durationIn);\n\t}\n\n /**\n * Setup a rotate camera transition object which rotate the \n * camera by the specified the angle in the specified \n * duration. This will not work if {@link cameraTransition}\n * is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {THREE.Vector3} axis - the starting viewport\n * @param {Number} angle - the viewport ti end the transistion with.\n * @param {Number} duration - duration of the smooth transition.\n */\n\tthis.rotateCameraTransition = (axis, angle, duration) => {\n\t if (smoothCameraTransitionObject == undefined)\n\t rotateCameraTransitionObject = new RotateCameraTransition(axis, angle,\n\t this, duration);\n\t}\n\n /**\n * Enable camera transition, {@link rotateCameraTransition} amd\n * {@link cameraTransition} must be called before camera transition can\n * be enabled.\n */\n\tthis.enableCameraTransition = () => {\n\t if (smoothCameraTransitionObject)\n\t currentMode = MODE.SMOOTH_CAMERA_TRANSITION;\n\t if (rotateCameraTransitionObject)\n\t currentMode = MODE.ROTATE_CAMERA_TRANSITION;\n\t}\n\n /**\n * Pause the camera transition.\n */\n\tthis.pauseCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\n /**\n * Stop the camera transition and remove camera transition\n * and rotate camera transition.\n */\n\tthis.stopCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tsmoothCameraTransitionObject = undefined;\n\t\trotateCameraTransitionObject = undefined;\n\t}\n\n /**\n * Check if camera transition is active.\n */\n\tthis.isTransitioningCamera = () => {\n\t\treturn (currentMode === MODE.SMOOTH_CAMERA_TRANSITION ||\n\t\t currentMode === MODE.ROTATE_CAMERA_TRANSITION);\n\t}\n \n /**\n * Setup auto tumble object of the camera which will rotate the camera\n * around the target as if the user is rotating the camera by mouse/touch\n * interaction.\n * The tumbling will only be enabled with {@link enabelAutoTumble}. \n * \n * @param {Array} tumbleDirectionIn - direction of the mouse/touch.\n * @param {Number} tumbleRateIn - Speed of the tumbling.\n * @param {Boolean} stopOnCameraInputIn - Disable the tumbling once the user\n * start interacting with the scene.\n */\n\tthis.autoTumble = (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn) => {\n\t\tcameraAutoTumbleObject = new CameraAutoTumble(tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, this);\n\t}\n\n /**\n * Enable autotumble.\n */\n\tthis.enableAutoTumble = () => {\n\t\tcurrentMode = MODE.AUTO_TUMBLE;\n\t}\n\n /**\n * Disable the autotumble.\n */\n\tthis.stopAutoTumble = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tcameraAutoTumbleObject = undefined;\n\t}\n\n /**\n * Update the autotumble object.\n */\n\tthis.updateAutoTumble = () => {\n\t\tif (cameraAutoTumbleObject)\n\t\t\tcameraAutoTumbleObject.requireUpdate = true;\n\t}\n\n /**\n * Check rather autotumble is active.\n * \n * @return {Boolean}\n */\n\tthis.isAutoTumble = () => {\n\t\treturn (currentMode === MODE.AUTO_TUMBLE);\n\t}\n\t\n /**\n * Create an internal raycaster object and enable it for picking.\n * \n * @param {Scene} sceneIn - The scene to pick from, it can be different from the\n * camera's scene.\n * @param {requestCallback} callbackFunctionIn - The callback for pick event.\n * @param {requestCallback} hoverCallbackFunctionIn - The callback for hover\n * over event.\n */\n this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n if (zincRayCaster == undefined)\n zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n }\n\n /**\n * Disable raycaster and remove the internal ray caster object.\n */\n this.disableRaycaster = () => {\n zincRayCaster.disable();\n zincRayCaster = undefined;\n }\n\n /**\n * Check rather the camera is in syncControl mode.\n * \n * @return {Boolean}\n */\n this.isSyncControl = () => {\n return currentMpde === MODE.SYNC_CONTROL;\n }\n\n /**\n * Enable syncControl.\n */\n this.enableSyncControl = () => {\n currentMode = MODE.SYNC_CONTROL;\n if (!ndcControl)\n ndcControl = new NDCCameraControl();\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n return ndcControl;\n }\n\n /**\n * Disable syncControl.\n */\n this.disableSyncControl = () => {\n currentMode = MODE.DEFAULT;\n this.cameraObject.zoom = 1;\n this.cameraObject.updateProjectionMatrix();\n }\n\t\n\tthis.enable();\n\n};\n\nconst SmoothCameraTransition = function(startingViewport, endingViewport, targetCameraIn, durationIn) {\n\tconst startingEyePosition = startingViewport.eyePosition;\n\tconst startingTargetPosition = startingViewport.targetPosition;\n\tconst startingUp = startingViewport.upVector;\n\tconst endingEyePosition = endingViewport.eyePosition;\n\tconst endingTargetPosition = endingViewport.targetPosition;\n\tconst endingUp = endingViewport.upVector;\n\tconst targetCamera = targetCameraIn;\n\tlet duration = durationIn;\n\tlet inbuildTime = 0;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tlet completed = false;\n\ttargetCamera.near = Math.min(startingViewport.nearPlane, endingViewport.nearPlane);\n\ttargetCamera.far = Math.max(startingViewport.farPlane, endingViewport.farPlane);\n\ttargetCamera.cameraObject.up.set( endingViewport.upVector[0], endingViewport.upVector[1],\n endingViewport.upVector[2]);\n \n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\t\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = duration;\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\tconst updateCameraSettings = () => {\n\t\tconst ratio = inbuildTime / duration;\n\t\tconst eyePosition = [startingEyePosition[0] * (1.0 - ratio) + endingEyePosition[0] * ratio,\n\t\t startingEyePosition[1] * (1.0 - ratio) + endingEyePosition[1] * ratio,\n\t\t startingEyePosition[2] * (1.0 - ratio) + endingEyePosition[2] * ratio];\n\t\tconst targetPosition = [startingTargetPosition[0] * (1.0 - ratio) + endingTargetPosition[0] * ratio,\n\t\t startingTargetPosition[1] * (1.0 - ratio) + endingTargetPosition[1] * ratio,\n\t\t startingTargetPosition[2] * (1.0 - ratio) + endingTargetPosition[2] * ratio];\n const upVector = [startingUp[0] * (1.0 - ratio) + endingUp[0] * ratio,\n startingUp[1] * (1.0 - ratio) + endingUp[1] * ratio,\n startingUp[2] * (1.0 - ratio) + endingUp[2] * ratio];\n\t\ttargetCamera.cameraObject.position.set( eyePosition[0], eyePosition[1], eyePosition[2]);\n\t\ttargetCamera.cameraObject.target.set( targetPosition[0], targetPosition[1], targetPosition[2] );\n\t};\n\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tupdateTime(delta);\n\t\t\n\t\tupdateCameraSettings();\n\t\t\n\t\tif (inbuildTime == duration) {\n\t\t\tcompleted = true;\n\t\t}\n\n\t}\n\t\n\tthis.isTransitionCompleted = () => {\n\t\treturn completed;\n\t}\n\t\n};\n\nconst RotateCameraTransition = function(axisIn, angleIn, targetCameraIn, durationIn) {\n const axis = axisIn;\n const angle = angleIn;\n const targetCamera = targetCameraIn;\n let duration = durationIn;\n let inbuildTime = 0;\n const enabled = true;\n const ratio = inbuildTime / duration;\n let completed = false;\n\n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 0.1;\n const mouse = new THREE.Vector2();\n let awaiting = false;\n let lastHoveredDate = new Date();\n let lastHoveredEmpty = false;\n let timeDiff = 0;\n let pickedObjects = new Array();\n let lastPosition = { zincCamera: undefined, x: -1 ,y: -1};\n\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n zincCamera.getNDCFromDocumentCoords(x, y, mouse);\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n raycaster.setFromCamera( mouse, zincCamera.cameraObject);\n let objects = scene.getPickableThreeJSObjects();\n //Reset pickedObjects array \n pickedObjects.length = 0;\n\t\treturn raycaster.intersectObjects( objects, true, pickedObjects );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tgetIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(pickedObjects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n getIntersectsObject(zincCamera, x, y);\n lastHoveredDate.setTime(Date.now());\n if (pickedObjects.length === 0) {\n //skip hovered callback if the previous one is empty\n if (lastHoveredEmpty)\n return\n lastHoveredEmpty = true;\n } else {\n lastHoveredEmpty = false;\n }\n hoverCallbackFunction(pickedObjects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n lastPosition.zincCamera = zincCamera;\n lastPosition.x = x;\n lastPosition.y = y;\n if (!awaiting) {\n timeDiff = lastHoveredDate ? Date.now() - lastHoveredDate.getTime() : 250;\n if (timeDiff >= 250) {\n hovered(zincCamera, x, y);\n } else {\n awaiting = true;\n setTimeout(awaitMove(lastPosition), timeDiff);\n }\n }\n }\n }\n }\n \n let awaitMove = (lastPosition) => {\n return function() {\n awaiting = false;\n hovered(lastPosition.zincCamera, lastPosition.x, lastPosition.y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nStereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\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\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nconst NDCCameraControl = function () {\n\tlet camera = undefined;\n let targetCamera = undefined;\n let defaultViewport = undefined;\n const position = new THREE.Vector3();\n const target = new THREE.Vector3();\n const v1 = new THREE.Vector3();\n const v2 = new THREE.Vector3();\n let eventCallback = undefined;\n\n this.setCurrentCameraSettings = (cameraIn, defaultViewportIn) => {\n camera = cameraIn.clone();\n targetCamera = cameraIn;\n defaultViewport = defaultViewportIn;\n camera.near = defaultViewport.nearPlane;\n if (defaultViewport.farPlane)\n camera.far = defaultViewport.farPlane;\n if (defaultViewport.eyePosition)\n camera.position.set(defaultViewport.eyePosition[0],\n defaultViewport.eyePosition[1], defaultViewport.eyePosition[2]);\n if (defaultViewport.upVector)\n camera.up.set(defaultViewport.upVector[0], defaultViewport.upVector[1],\n defaultViewport.upVector[2]);\n if (defaultViewport.targetPosition) {\n camera.target = new THREE.Vector3(defaultViewport.targetPosition[0],\n defaultViewport.targetPosition[1], defaultViewport.targetPosition[2]);\n camera.lookAt(camera.target);\n }\n camera.updateProjectionMatrix();\n position.copy(camera.position).project(camera);\n target.copy(camera.target).project(camera);\n }\n\t\n this.getCurrentPosition = () => {\n target.copy(targetCamera.target).project(camera);\n return [target.x, target.y];\n }\n\n this.zoom = delta => {\n let scaledDelta = delta * 0.002;\n let zoom = Math.max(targetCamera.zoom - scaledDelta, 1.0);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.zoomToBox = (box, zoom) => {\n box.getCenter(v1);\n v1.project(camera);\n this.setCenterZoom([v1.x, v1.y], zoom);\n }\n\t \n //return top left and size\n this.getPanZoom = () => {\n return {target: this.getCurrentPosition(), zoom: targetCamera.zoom };\n }\n\n this.setCenterZoom = (center, zoom) => {\n v1.set(center[0], center[1], target.z).unproject(camera);\n v2.copy(v1).sub(targetCamera.target);\n targetCamera.target.copy(v1);\n targetCamera.lookAt(targetCamera.target);\n targetCamera.position.add(v2);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.setEventCallback = (callback) => {\n if (callback === undefined || (typeof callback == 'function'))\n eventCallback = callback;\n }\n\n this.triggerCallback = () => {\n if (eventCallback !== undefined && (typeof eventCallback == 'function'))\n eventCallback();\n }\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\nexports.NDCCameraControl = NDCCameraControl\n","const { Group, Matrix4 } = require('three');\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"re\" + uniqueiId++;\n}\n\n/**\n * Provides a hierachical structure to objects, Each region\n * may contain multiple child regions and {@link ZincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Region}\n */\nlet Region = function (parentIn) {\n let parent = parentIn;\n let group = new Group();\n group.matrixAutoUpdate = false;\n group.userData = this;\n let children = [];\n let name = \"\";\n let zincObjects = [];\n const tMatrix = new Matrix4();\n let duration = 3000;\n tMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n this.pickableUpdateRequired = true;\n this.isRegion = true;\n this.uuid = getUniqueId();\n \n\n /**\n * Hide all primitives belong to this region.\n */\n this.hideAllPrimitives = () => {\n children.forEach(child => child.hideAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n /**\n * Show all primitives belong to this region.\n */\n this.showAllPrimitives = () => {\n children.forEach(child => child.showAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(true));\n }\n\n /**\n * Set the visibility and propagate it down the hierarchies\n * depending on the flag.\n * \n * @param {Boolean} flag - A flag indicating either the visibilty to be on/off.\n */\n this.setVisibility = (flag) => {\n group.visible = flag;\n }\n\n /**\n * Get the visibility of the region and its children.\n * \n * @return {Boolean}\n */\n this.getVisibility = () => {\n return group.visible;\n }\n\n /**\n * Get the {THREE.Group} containing all child regions and their\n * primitives.\n * \n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Set the transformation with a {THREE.Matrix4} matrix, this will affect\n * all primitives in this and its child regions\n * \n * @param {THREE.Matrix4} transformation - The transformation matrix\n * used for the transformation.\n */\n this.setTransformation = transformation => {\n tMatrix.set(...transformation);\n group.matrix.copy(tMatrix);\n group.updateMatrixWorld();\n }\n\n /**\n * Set the name of this region.\n * \n * @param {String} nameIn - Name to be set for this region. It must be defined\n * and non-empty.\n */\n this.setName = (nameIn) => {\n if (nameIn && nameIn !== \"\") {\n name = nameIn;\n }\n }\n\n /**\n * Get the name of this region.\n * \n * @return {String}\n */\n this.getName = () => {\n return name;\n }\n\n /**\n * Get the parent region.\n * \n * @return {Region}\n */\n this.getParent = () => {\n return parent;\n }\n\n /**\n * Get the array of each hierarachy from the root region to this region.\n * \n * @return {Array}\n */\n this.getFullSeparatedPath = () => {\n const paths = [];\n if (name !== \"\") {\n paths.push(name);\n for (let p = parent; p !== undefined;) {\n const parentName = p.getName();\n if (parentName !== \"\") {\n paths.unshift(parentName);\n }\n p = p.getParent();\n }\n }\n return paths;\n }\n\n /**\n * Get the full paths from the root region to this region.\n * \n * @return {String}\n */\n this.getFullPath = () => {\n const paths = this.getFullSeparatedPath();\n if (paths.length > 0) {\n let fullPath = paths.shift();\n paths.forEach(path => {\n fullPath = fullPath.concat(\"/\", path);\n });\n return fullPath;\n }\n return \"\";\n }\n\n /**\n * Create a new child region with the provided name.\n * @param {String} nameIn - Name to be set for the new child region.\n * \n * @return {Region}\n */\n this.createChild = (nameIn) => {\n let childRegion = new Region(this);\n childRegion.setName(nameIn);\n children.push(childRegion);\n group.add(childRegion.getGroup());\n return childRegion;\n }\n\n /**\n * Get the child region with matching childName.\n * @param {String} childName - Name to be matched.\n * \n * @return {Region}\n */\n this.getChildWithName = childName => {\n if (childName) {\n const lowerChildName = childName.toLowerCase();\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName().toLowerCase() === lowerChildName)\n return children[i];\n }\n }\n return undefined;\n }\n\n /**\n * Find a child region using the path array.\n * @param {Array} pathArray - Array containing regions' name at each\n * hierarchy to match.\n * \n * @return {Region}\n */\n this.findChildFromSeparatedPath = pathArray => {\n if (pathArray && pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray && pathArray.length > 0) {\n const childRegion = this.getChildWithName(pathArray[0]);\n if (childRegion) {\n pathArray.shift();\n return childRegion.findChildFromSeparatedPath(pathArray);\n } else {\n return undefined;\n }\n }\n return this;\n }\n\n /**\n * Find the region using the provided relative path.\n * \n * @param {String} path - Relative paths from this region\n * to the child region.\n * \n * @return {Region}\n */\n this.findChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.findChildFromSeparatedPath(pathArray);\n }\n\n /**\n * Create a new child using the path array. All required new regions\n * down the path will be created.\n * \n * @param {Array} pathArray - Array containing regions' name, new regions\n * will be created along the path if not found.\n * \n * @return {Region}\n */\n this.createChildFromSeparatedPath = pathArray => {\n if (pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray.length > 0) {\n let childRegion = this.getChildWithName(pathArray[0]);\n if (!childRegion) {\n childRegion = this.createChild(pathArray[0]);\n }\n pathArray.shift();\n return childRegion.createChildFromSeparatedPath(pathArray);\n }\n return this;\n }\n\n /**\n * Create a new child using the path. All required new regions\n * down the path will be created.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.createChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.createChildFromSeparatedPath(pathArray);\n }\n\n\n /**\n * Return existing region if it exists, otherwise, create a new\n * region with the provided path.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.findOrCreateChildFromPath = (path) => {\n let childRegion = this.findChildFromPath(path);\n if (!childRegion) {\n childRegion = this.createChildFromPath(path);\n }\n return childRegion;\n }\n\n /**\n * Add a zinc object into this region, the morph will be added\n * to the group.\n * \n * @param {ZincObject} zincObject - Zinc object to be added into\n * this region.\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n zincObject.setRegion(this);\n group.add(zincObject.morph);\n zincObjects.push(zincObject);\n this.pickableUpdateRequired = true;\n }\n }\n\n /**\n * Remove a ZincObject from this region if it presents. This will eventually\n * destroy the object and free up the memory.\n * \n * @param {ZincObject} zincObject - object to be removed from this region.\n */\n this.removeZincObject = zincObject => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n group.remove(zincObject.morph);\n zincObjects.splice(i, 1);\n zincObject.dispose();\n return;\n }\n }\n }\n\n /**\n * Return true if pickable objects require an update.\n * \n * @param {Boolean} transverse - Check child regions as well\n * if this is set to true.\n * \n * @return {Boolean}\n */\n this.checkPickableUpdateRequred = (transverse) => {\n if (this.pickableUpdateRequired) return true;\n if (transverse) {\n let flag = false;\n for (let i = 0; i < children.length; i++) {\n flag = children[i].checkPickableUpdateRequred(transverse);\n if (flag) return true;\n }\n }\n return false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = (objectsList, pickMarkers, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.morph && zincObject.morph.visible) {\n if (pickMarkers) {\n let marker = zincObject.marker;\n if (marker && marker.isEnabled()) {\n objectsList.push(marker.morph);\n }\n } else {\n objectsList.push(zincObject.morph);\n }\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.getPickableThreeJSObjects(objectsList, pickMarkers,\n transverse);\n });\n }\n this.pickableUpdateRequired = false;\n return objectsList;\n }\n\n /**\n * Set the default duration value for all zinc objects\n * that are to be loaded into this region.\n * \n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n duration = durationIn;\n zincObjects.forEach(zincObject => zincObject.setDuration(durationIn));\n children.forEach(childRegion => childRegion.setDuration(durationIn));\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Get the bounding box of all the object in this and child regions only.\n * Do not include the matrix transformation here, it is done at the primitives\n * level.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = transverse => {\n let boundingBox1 = undefined, boundingBox2 = undefined;\n zincObjects.forEach(zincObject => {\n boundingBox2 = zincObject.getBoundingBox();\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n boundingBox2 = childRegion.getBoundingBox(transverse);\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n }\n return boundingBox1;\n }\n\n /**\n * Clear and dispose all objects belong to this region.\n * \n * @param {Boolean} transverse - Clear and dispose child regions as well\n * if this is set to true.\n */\n this.clear = transverse => {\n if (transverse) {\n children.forEach(childRegion => childRegion.clear(transverse));\n }\n zincObjects.forEach(zincObject => {\n group.remove(zincObject.morph);\n zincObject.dispose();\n });\n children = [];\n zincObjects = [];\n }\n\n /**\n * Check if a zincObject is a member of this region.\n * \n * @param {ZincObject} zincObject - The ZincObject to be checked.\n * @param {Boolean} transverse - Also check the child regions.\n * \n * @return {Boolean}\n */\n this.objectIsInRegion = (zincObject, transverse) => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n if (transverse) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].objectIsInRegion(zincObject, transverse))\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachGeometry = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGeometry)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGeometry(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachGlyphset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGlyphset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGlyphset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachPointset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isPointset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachPointset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachLine = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isLines)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachLine(\n callbackFunction, transverse));\n }\n\n this.findObjectsWithAnatomicalId = (anatomicalId, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.anatomicalId === anatomicalId)\n objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithAnatomicalId(anatomicalId, transverse);\n objectsArray.push(...childObjects);\n });\n }\n\n return objectsArray;\n }\n\n /** \n * Find and return all zinc objects in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = (groupName, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n const lowerObjectName = zincObject.groupName ? zincObject.groupName.toLowerCase() : zincObject.groupName;\n const lowerGroupName = groupName ? groupName.toLowerCase() : groupName;\n if (lowerObjectName === lowerGroupName)\n objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithGroupName(groupName, transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Find and return all geometries in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const geometriesArray = primitivesArray.filter(primitive => primitive.isGeometry);\n return geometriesArray;\n }\n\n /** \n * Find and return all pointsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const pointsetsArray = primitivesArray.filter(primitive => primitive.isPointset);\n return pointsetsArray;\n }\n\n /** \n * Find and return all glyphsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const glyphsetsArray = primitivesArray.filter(primitive => primitive.isGlyphset);\n return glyphsetsArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findLinesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const linesArray = primitivesArray.filter(primitive => primitive.isLines);\n return linesArray;\n }\n\n /** \n * Get all zinc objects in this region.\n * \n * @param {Boolean} transverse - Include zinc objects in child regions if this is\n * set to true.\n * @returns {Array}\n */\n this.getAllObjects = transverse => {\n const objectsArray = [...zincObjects];\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.getAllObjects(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Get all child regions.\n * \n * @param {Boolean} transverse - Include all regions which are descendants of \n * this reigon when this is set to true.\n * @returns {Array}\n */\n this.getChildRegions = transverse => {\n const objectsArray = [...children];\n if (transverse) {\n children.forEach(childRegion => {\n const childObjects = childRegion.getChildRegions(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /**\n * Get the current time of the region.\n * Return -1 if no graphics in the region.\n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\n } else {\n for (let i = 0; i < children.length; i++) {\n const time = children[i].getCurrentTime();\n if (time !== -1)\n return time;\n }\n }\n return -1;\n }\n\n /**\n * Set the current time of all the objects of this region.\n * \n * @param {Number} time - Value to set the time to.\n * @param {Boolean} transverse - Set the time for chidl regions if\n * this is set to true.\n */\n this.setMorphTime = (time, transverse) => {\n zincObjects.forEach(zincObject => {\n zincObject.setMorphTime(time);\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.setMorphTime(time);\n });\n }\n }\n\n /**\n * Check if any object in this region is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isTimeVarying()) {\n return true;\n }\n }\n for (let i = 0; i < children.length; i++) {\n if (children[i].isTimeVarying()) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation, options, transverse) => {\n // Let video dictates the progress if one is present\n const allObjects = this.getAllObjects(transverse);\n allObjects.forEach(zincObject => {\n zincObject.render(playRate * delta, playAnimation, options);\n });\n //process markers visibility and size\n if (options && options.displayMarkers && (playAnimation === false)) {\n if (options.markerDepths.length > 0) {\n const min = Math.min(...options.markerDepths);\n const max = Math.max(...options.markerDepths);\n allObjects.forEach(zincObject => {\n zincObject.processMarkerVisual(min, max, options);\n });\n }\n }\n }\n}\n\nexports.Region = Region;\n","const THREE = require('three');\n\n/**\n * This provide a full scale minimap. It will always\n * display the whole map.\n * \n * @class\n * @author Alan Wu\n * @return {Minimap}\n */\nexports.Minimap = function (sceneIn) {\n let targetScene = sceneIn;\n this.camera = new THREE.OrthographicCamera(\n -0.5, 0.5, 0.5, -0.5, 0.01, 10);\n this.helper = undefined;\n let geometry = new THREE.BufferGeometry();\n var vertices = new Float32Array( [\n -1.0, -1.0, 1.0,\n 1.0, -1.0, 1.0,\n 1.0, 1.0, 1.0,\n 1.0, 1.0, 1.0,\n -1.0, 1.0, 1.0,\n -1.0, -1.0, 1.0\n ] );\n let positionAttributes = new THREE.BufferAttribute( vertices, 3 );\n geometry.setAttribute( 'position', positionAttributes);\n var material = new THREE.MeshBasicMaterial( { color: 0x333333, \n depthTest: false,\n depthWrite: false,\n opacity: 0.5,\n transparent: true } );\n this.mask = new THREE.Mesh( geometry, material );\n let _box = new THREE.Box3();\n let _center = new THREE.Vector3();\n\n this.getDiffFromNormalised = (x, y) => {\n _box.setFromBufferAttribute(positionAttributes).getCenter(_center);\n let coord = _center.clone().project(this.camera);\n let new_coord = new THREE.Vector3(x, y, coord.z).unproject(this.camera);\n return new_coord.sub(_center);\n }\n\n let setCurrentCameraSettings = (diameter, newViewport) => {\n if (targetScene.camera.near)\n this.camera.near = targetScene.camera.near;\n if (newViewport.farPlane)\n this.camera.far = newViewport.farPlane;\n if (newViewport.eyePosition)\n this.camera.position.set(newViewport.eyePosition[0],\n newViewport.eyePosition[1], newViewport.eyePosition[2]);\n if (newViewport.upVector)\n this.camera.up.set(newViewport.upVector[0], newViewport.upVector[1],\n newViewport.upVector[2]);\n if (newViewport.targetPosition)\n this.camera.lookAt(new THREE.Vector3(newViewport.targetPosition[0],\n newViewport.targetPosition[1], newViewport.targetPosition[2]));\n this.camera.zoom = 1 / diameter;\n this.camera.updateProjectionMatrix();\n }\n\n this.getBoundary = () => {\n let target = new THREE.Vector3().copy(\n targetScene.camera.target).project(targetScene.camera);\n let v1 = new THREE.Vector3(-1, -1, target.z).unproject(targetScene.camera);\n let v2 = new THREE.Vector3(1, -1, target.z).unproject(targetScene.camera);\n let v3 = new THREE.Vector3(1, 1, target.z).unproject(targetScene.camera);\n let v4 = new THREE.Vector3(-1, 1, target.z).unproject(targetScene.camera);\n let array = [v1, v2, v3, v3, v4, v1];\n positionAttributes.copyVector3sArray(array);\n positionAttributes.needsUpdate = true;\n }\n\n this.updateCamera = () => {\n this.getBoundary();\n let cameraControl = targetScene.getZincCameraControls();\n let boundingBox = targetScene.getBoundingBox();\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const diameter = boundingBox.min.distanceTo(boundingBox.max);\n const radius = diameter / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = cameraControl.getViewportFromCentreAndRadius(\n centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n setCurrentCameraSettings(diameter, viewport);\n }\n }\n}\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Geometry = require('./primitives/geometry').Geometry;\nconst work = require('webworkify-webpack');\nconst Promise = require('promise-polyfill').default;\n//const work = undefined;\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nconst GeometryCSG = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n\thost = hostIn;\n let core = undefined;\n let worker = undefined;\n let onProgress = false;\n let myResolve = undefined;\n \n var createGeometryFromJSON = json => {\n\t \tconst material = host.morph.material.clone();\n\t \tmaterial.morphTargets = false;\n\t const newGeometry = new Geometry();\n\t\tconst JSONParser = new JSONLoader();\n\t\tconst geometry = JSONParser.parse(json);\n const mesh = new THREE.Mesh(geometry.geometry, material);\n\t newGeometry.geometry = mesh.geometry;\n\t newGeometry.morph = mesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n var workerEventHandler = ev => {\n\t switch (ev.data.action) {\n\t \tcase 'message':\n\t console.log(ev.data.message);\n\t break;\n\t \tcase 'result':\n\t \tconst csg = new GeometryCSG(createGeometryFromJSON(ev.data.object));\n\t \tif (myResolve)\n\t \t\tmyResolve(csg);\n\t \tmyResolve = undefined;\n\t \tonProgress = false;\n\t break;\n\t \tdefault:\n\t \tthrow 'Cannot handle specified action.';\n }\n }\n \n var initialise = hostIn => {\n\t if (work !== undefined) {\n\t\tworker = work(require.resolve('./workers/geometryCSG.worker.js'));\n\t }\n\t if (!worker) {\n\t core = new (require('./workers/geometryCSGInternal').GeometryCSGInternal)(hostIn);\n\t } else {\n\t\tif (hostIn && hostIn.isGeometry) {\n\t\t let mesh = hostIn.morph;\n\t\t let json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t worker.addEventListener('message', function (ev) {\n\t\t\t workerEventHandler(ev);\n\t\t });\n\t\t worker.postMessage({action: \"initialise\", object: json});\n\t\t}\n\t }\n }\n \n this.getHostGeometry = () => {\n\tconst tempCSG = new ThreeBSP(host.morph);\n return new createZincGeometry(tempCSG);\n }\n \n this.getGeometry = () => host;\n \n const createZincGeometry = csgMesh => {\n\t\tconst material = host.morph.material.clone();\n\t\tmaterial.morphTargets = false;\n\t\tconst newMesh = csgMesh.toMesh(material);\n\t const newGeometry = new Geometry();\n\t newGeometry.geometry = newMesh.geometry;\n\t newGeometry.morph = newMesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n this.setCSG = CSG => {\n\t core.setCSG(CSG);\n } \n \n const sendToWork = (guestGeometry, action, resolve, reject) => {\n\t if (!onProgress) {\n\t\t let mesh = guestGeometry.morph;\n\t\t const json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t myResolve = resolve;\n\t\t onProgress = true;\n\t\t worker.postMessage({action: action, object: json});\n\t } else {\n\t\t reject(\"On progress\");\n\t }\n }\n \n this.intersect = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.intersect(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n\t};\n \n this.subtract = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.subtract(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.union = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.union(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.terminateWorker = () => {\n\t if (worker)\n\t\t worker.terminate();\n }\n \n initialise(hostIn);\n};\n\nexports.GeometryCSG = GeometryCSG;\n","'use strict';\n\t\n\tvar ThreeBSP,\n\t\tEPSILON = 1e-5,\n\t\tCOPLANAR = 0,\n\t\tFRONT = 1,\n\t\tBACK = 2,\n\t\tSPANNING = 3;\n\t\n module.exports = function( THREE ) {\n var ThreeBSP = function( geometry ) {\n // Convert THREE.Geometry to ThreeBSP\n var i, _length_i,\n face, vertex, faceVertexUvs, uvs,\n polygon,\n polygons = [],\n tree;\n \n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n if ( geometry instanceof THREE.Geometry ) {\n this.matrix = new THREE.Matrix4;\n } else if ( geometry.isMesh ) {\n // #todo: add hierarchy support\n geometry.updateMatrix();\n this.matrix = geometry.matrix.clone();\n geometry = geometry.geometry;\n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n geometry.mergeVertices();\n geometry.computeVertexNormals(false);\n } else if ( geometry instanceof ThreeBSP.Node ) {\n this.tree = geometry;\n this.matrix = new THREE.Matrix4;\n return this;\n } else {\n throw 'ThreeBSP: Given geometry is unsupported';\n }\n \n for ( i = 0, _length_i = geometry.faces.length; i < _length_i; i++ ) {\n face = geometry.faces[i];\n faceVertexUvs = geometry.faceVertexUvs[0][i];\n polygon = new ThreeBSP.Polygon;\n \n if ( face instanceof THREE.Face3 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else if ( typeof THREE.Face4 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[1], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.d ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[3].x, faceVertexUvs[3].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[3], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else {\n throw 'Invalid face type at index ' + i;\n }\n \n polygon.calculateProperties();\n polygons.push( polygon );\n };\n \n this.tree = new ThreeBSP.Node( polygons );\n };\n ThreeBSP.prototype.subtract = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.union = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.intersect = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n b.clipTo( a );\n b.invert();\n a.clipTo( b );\n b.clipTo( a );\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.toGeometry = function() {\n var i, j,\n matrix = new THREE.Matrix4().getInverse( this.matrix ),\n geometry = new THREE.Geometry(),\n polygons = this.tree.allPolygons(),\n polygon_count = polygons.length,\n polygon, polygon_vertice_count,\n vertice_dict = {},\n vertex_idx_a, vertex_idx_b, vertex_idx_c,\n vertex, face,\n verticeUvs;\n \n for ( i = 0; i < polygon_count; i++ ) {\n polygon = polygons[i];\n polygon_vertice_count = polygon.vertices.length;\n \n for ( j = 2; j < polygon_vertice_count; j++ ) {\n verticeUvs = [];\n \n vertex = polygon.vertices[0];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n \n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j-1];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n face = new THREE.Face3(\n vertex_idx_a,\n vertex_idx_b,\n vertex_idx_c,\n new THREE.Vector3( polygon.normal.x, polygon.normal.y, polygon.normal.z )\n );\n \n geometry.faces.push( face );\n geometry.faceVertexUvs[0].push( verticeUvs );\n }\n \n }\n return geometry;\n };\n ThreeBSP.prototype.toBufferGeometry = function( ) {\n var geometry = this.toGeometry();\n var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\n\n return bufferGeometry;\n };\n ThreeBSP.prototype.toMesh = function( material ) {\n var geometry = this.toBufferGeometry(),\n mesh = new THREE.Mesh( geometry, material );\n \n mesh.position.setFromMatrixPosition( this.matrix );\n mesh.rotation.setFromRotationMatrix( this.matrix );\n \n return mesh;\n };\n \n \n ThreeBSP.Polygon = function( vertices, normal, w ) {\n if ( !( vertices instanceof Array ) ) {\n vertices = [];\n }\n \n this.vertices = vertices;\n if ( vertices.length > 0 ) {\n this.calculateProperties();\n } else {\n this.normal = this.w = undefined;\n }\n };\n ThreeBSP.Polygon.prototype.calculateProperties = function() {\n var a = this.vertices[0],\n b = this.vertices[1],\n c = this.vertices[2];\n \n this.normal = b.clone().subtract( a ).cross(\n c.clone().subtract( a )\n ).normalize();\n \n this.w = this.normal.clone().dot( a );\n \n return this;\n };\n ThreeBSP.Polygon.prototype.clone = function() {\n var i, vertice_count,\n polygon = new ThreeBSP.Polygon;\n \n for ( i = 0, vertice_count = this.vertices.length; i < vertice_count; i++ ) {\n polygon.vertices.push( this.vertices[i].clone() );\n };\n polygon.calculateProperties();\n \n return polygon;\n };\n \n ThreeBSP.Polygon.prototype.flip = function() {\n var i, vertices = [];\n \n this.normal.multiplyScalar( -1 );\n this.w *= -1;\n \n for ( i = this.vertices.length - 1; i >= 0; i-- ) {\n vertices.push( this.vertices[i] );\n };\n this.vertices = vertices;\n \n return this;\n };\n ThreeBSP.Polygon.prototype.classifyVertex = function( vertex ) { \n var side_value = this.normal.dot( vertex ) - this.w;\n \n if ( side_value < -EPSILON ) {\n return BACK;\n } else if ( side_value > EPSILON ) {\n return FRONT;\n } else {\n return COPLANAR;\n }\n };\n ThreeBSP.Polygon.prototype.classifySide = function( polygon ) {\n var i, vertex, classification,\n num_positive = 0,\n num_negative = 0,\n vertice_count = polygon.vertices.length;\n \n for ( i = 0; i < vertice_count; i++ ) {\n vertex = polygon.vertices[i];\n classification = this.classifyVertex( vertex );\n if ( classification === FRONT ) {\n num_positive++;\n } else if ( classification === BACK ) {\n num_negative++;\n }\n }\n \n if ( num_positive > 0 && num_negative === 0 ) {\n return FRONT;\n } else if ( num_positive === 0 && num_negative > 0 ) {\n return BACK;\n } else if ( num_positive === 0 && num_negative === 0 ) {\n return COPLANAR;\n } else {\n return SPANNING;\n }\n };\n ThreeBSP.Polygon.prototype.splitPolygon = function( polygon, coplanar_front, coplanar_back, front, back ) {\n var classification = this.classifySide( polygon );\n \n if ( classification === COPLANAR ) {\n \n ( this.normal.dot( polygon.normal ) > 0 ? coplanar_front : coplanar_back ).push( polygon );\n \n } else if ( classification === FRONT ) {\n \n front.push( polygon );\n \n } else if ( classification === BACK ) {\n \n back.push( polygon );\n \n } else {\n \n var vertice_count,\n i, j, ti, tj, vi, vj,\n t, v,\n f = [],\n b = [];\n \n for ( i = 0, vertice_count = polygon.vertices.length; i < vertice_count; i++ ) {\n \n j = (i + 1) % vertice_count;\n vi = polygon.vertices[i];\n vj = polygon.vertices[j];\n ti = this.classifyVertex( vi );\n tj = this.classifyVertex( vj );\n \n if ( ti != BACK ) f.push( vi );\n if ( ti != FRONT ) b.push( vi );\n if ( (ti | tj) === SPANNING ) {\n t = ( this.w - this.normal.dot( vi ) ) / this.normal.dot( vj.clone().subtract( vi ) );\n v = vi.interpolate( vj, t );\n f.push( v );\n b.push( v );\n }\n }\n \n \n if ( f.length >= 3 ) front.push( new ThreeBSP.Polygon( f ).calculateProperties() );\n if ( b.length >= 3 ) back.push( new ThreeBSP.Polygon( b ).calculateProperties() );\n }\n };\n \n ThreeBSP.Vertex = function( x, y, z, normal, uv ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.normal = normal || new THREE.Vector3;\n this.uv = uv || new THREE.Vector2;\n };\n ThreeBSP.Vertex.prototype.clone = function() {\n return new ThreeBSP.Vertex( this.x, this.y, this.z, this.normal.clone(), this.uv.clone() );\n };\n ThreeBSP.Vertex.prototype.add = function( vertex ) {\n this.x += vertex.x;\n this.y += vertex.y;\n this.z += vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.subtract = function( vertex ) {\n this.x -= vertex.x;\n this.y -= vertex.y;\n this.z -= vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.multiplyScalar = function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n };\n ThreeBSP.Vertex.prototype.cross = function( vertex ) {\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * vertex.z - z * vertex.y;\n this.y = z * vertex.x - x * vertex.z;\n this.z = x * vertex.y - y * vertex.x;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.normalize = function() {\n var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n \n this.x /= length;\n this.y /= length;\n this.z /= length;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.dot = function( vertex ) {\n return this.x * vertex.x + this.y * vertex.y + this.z * vertex.z;\n };\n ThreeBSP.Vertex.prototype.lerp = function( a, t ) {\n this.add(\n a.clone().subtract( this ).multiplyScalar( t )\n );\n \n this.normal.add(\n a.normal.clone().sub( this.normal ).multiplyScalar( t )\n );\n \n this.uv.add(\n a.uv.clone().sub( this.uv ).multiplyScalar( t )\n );\n \n return this;\n };\n ThreeBSP.Vertex.prototype.interpolate = function( other, t ) {\n return this.clone().lerp( other, t );\n };\n ThreeBSP.Vertex.prototype.applyMatrix4 = function ( m ) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x, y = this.y, z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n };\n \n \n ThreeBSP.Node = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n\n this.polygons = [];\n this.front = this.back = undefined;\n \n if ( !(polygons instanceof Array) || polygons.length === 0 ) return;\n\n this.divider = polygons[0].clone();\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n this.front = new ThreeBSP.Node( front );\n }\n \n if ( back.length > 0 ) {\n this.back = new ThreeBSP.Node( back );\n }\n };\n ThreeBSP.Node.isConvex = function( polygons ) {\n var i, j;\n for ( i = 0; i < polygons.length; i++ ) {\n for ( j = 0; j < polygons.length; j++ ) {\n if ( i !== j && polygons[i].classifySide( polygons[j] ) !== BACK ) {\n return false;\n }\n }\n }\n return true;\n };\n ThreeBSP.Node.prototype.build = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n \n if ( !this.divider ) {\n this.divider = polygons[0].clone();\n }\n\n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n if ( !this.front ) this.front = new ThreeBSP.Node();\n this.front.build( front );\n }\n \n if ( back.length > 0 ) {\n if ( !this.back ) this.back = new ThreeBSP.Node();\n this.back.build( back );\n }\n };\n ThreeBSP.Node.prototype.allPolygons = function() {\n var polygons = this.polygons.slice();\n if ( this.front ) polygons = polygons.concat( this.front.allPolygons() );\n if ( this.back ) polygons = polygons.concat( this.back.allPolygons() );\n return polygons;\n };\n ThreeBSP.Node.prototype.clone = function() {\n var node = new ThreeBSP.Node();\n \n node.divider = this.divider.clone();\n node.polygons = this.polygons.map( function( polygon ) { return polygon.clone(); } );\n node.front = this.front && this.front.clone();\n node.back = this.back && this.back.clone();\n \n return node;\n };\n ThreeBSP.Node.prototype.invert = function() {\n var i, polygon_count, temp;\n \n for ( i = 0, polygon_count = this.polygons.length; i < polygon_count; i++ ) {\n this.polygons[i].flip();\n }\n \n this.divider.flip();\n if ( this.front ) this.front.invert();\n if ( this.back ) this.back.invert();\n \n temp = this.front;\n this.front = this.back;\n this.back = temp;\n \n return this;\n };\n ThreeBSP.Node.prototype.clipPolygons = function( polygons ) {\n var i, polygon_count,\n front, back;\n\n if ( !this.divider ) return polygons.slice();\n \n front = [], back = [];\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], front, back, front, back );\n }\n\n if ( this.front ) front = this.front.clipPolygons( front );\n if ( this.back ) back = this.back.clipPolygons( back );\n else back = [];\n\n return front.concat( back );\n };\n \n ThreeBSP.Node.prototype.clipTo = function( node ) {\n this.polygons = node.clipPolygons( this.polygons );\n if ( this.front ) this.front.clipTo( node );\n if ( this.back ) this.back.clipTo( node );\n };\n \n \n return ThreeBSP;\n }\n","module.exports = require(\"webworkify-webpack\");","module.exports = require(\"promise-polyfill\");","const Geometry = require('../primitives/geometry').Geometry;\nconst THREE = require('three');\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nmodule.exports = function (self) {\n\tlet core = undefined;\n\t\n\tvar geometryFromJSON = function(object) {\n\t\tvar JSONParser = new JSONLoader();\n\t\tvar geometry = JSONParser.parse(object);\n\t\tvar material = new THREE.MeshPhongMaterial();\n var mesh = new THREE.Mesh(geometry.geometry, material);\n var host = new Geometry();\n host.morph = mesh;\n return host;\n\t}\n\n\tvar initialise = function(object) {\n\t\tvar host = geometryFromJSON(object);\n\t\tcore = new (require('./geometryCSGInternal').GeometryCSGInternal)(host);\n\t\tself.postMessage({action:\"message\", message: \"Initialised\"});\n\t}\n\t\n\tvar intersect = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.intersect(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar subtract = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.subtract(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar union = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.union(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tself.addEventListener('message',function (ev){\n\t switch (ev.data.action) {\n \tcase 'initialise':\n initialise(ev.data.object);\n break;\n \tcase 'intersect':\n \t\tintersect(ev.data.object);\n break;\n \tcase 'subtract':\n \t\tsubtract(ev.data.object);\n break;\n \tcase 'union':\n \t\tunion(ev.data.object);\n break;\n \tdefault:\n \t\tthrow 'Cannot handle specified action.';\n\t }\n\t});\n\t\t\n //var test = ev.data;\n //self.postMessage(test, [test]);\n};\n\n","const THREE = require('three');\nconst ThreeBSP = require('../three-js-csg')(THREE);\nconst Geometry = require('../primitives/geometry').Geometry;\nconst GeometryCSG = require('../geometryCSG').GeometryCSG;\n\nconst GeometryCSGInternal = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n host = hostIn;\n let hostCSG = undefined;\n \n this.setGeometry = hostIn => {\n if (hostIn && hostIn.isGeometry)\n\t host = hostIn;\n hostCSG = undefined;\n }\n \n this.setCSG = csg => {\n\t hostCSG = csg;\n }\n \n const prepareCSG = guestGeometry => {\n\t if (host && host.morph && guestGeometry && guestGeometry.morph) {\n\t if (hostCSG === undefined)\n\t hostCSG = new ThreeBSP(host.morph);\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t return hostCSG.intersect(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.subtract = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.subtract(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.union = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.union(guestCSG);\n\t }\n\t return undefined;\n }\n};\n\nexports.GeometryCSGInternal = GeometryCSGInternal;\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Glyphset = require('./primitives/glyphset').Glyphset;\n\n/**\n * Provides an object which takes in a glyphset, convert it into a CSG and further\n * action such as intersect with another geometry may be performed.\n * \n * @class\n * @author Alan Wu\n * @return {GlyphsetCSG}\n */\nconst GlyphsetCSG = function (hostIn) {\n let host = undefined;\n if (hostIn && hostIn.isGlyphset)\n\t host = hostIn;\n const hostCSGs = new Array();\n const currentIntersect = undefined;\n \n this.setGlyphset = hostIn => {\n\t if (hostIn && hostIn.isGlyphset)\n\t\t host = hostIn;\n\t hostCSG = undefined;\n }\n \n this.getGlyphset = () => {\n\t return host;\n }\n \n const prepareCSGForGlyphs = () => {\n\t return glyph => {\n\t\t const mesh = glyph.getMesh();\n\t\t const label = glyph.getLabel();\n\t\t if (mesh) {\n\t\t\t const csg = new ThreeBSP(mesh.geometry.clone().applyMatrix(mesh.matrix));\n\t\t\t const store = [];\n\t\t\t store.csg = csg;\n\t\t\t store.label = label;\n\t\t\t if (mesh.material)\n\t\t\t\t store.material = mesh.material.clone();\n\t\t\t hostCSGs.push(store);\n\t\t }\n\t };\n };\n \n const prepareCSG = guestGeometry => {\n\t if (host && guestGeometry && guestGeometry.morph) {\n\t if (hostCSGs.length == 0) {\n\t \t host.forEachGlyph(prepareCSGForGlyphs());\n\t }\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if ((hostCSGs.length > 0) && guestCSG) {\n\t\tconst glyphset = new (require('./primitives/glyphset').Glyphset)();\n\t\tfor (let i = 0; i < hostCSGs.length; i++) {\n\t\t\tconst hostCSG = hostCSGs[i];\n\t\t const intersect = hostCSG.csg.intersect(guestCSG);\n\t\t const mesh = intersect.toMesh();\n\t\t if (mesh && mesh.geometry && (mesh.geometry.vertices.length > 0)) {\n\t\t \tif (hostCSG.material) {\n\t\t \t\tmesh.material = hostCSG.material;\n\t\t \t\tmesh.material.side = THREE.DoubleSide;\n\t\t \t\tmesh.material.clippingPlanes = null;\n\t\t \t}\n\t\t\t const glyph = glyphset.addMeshAsGlyph(mesh, i+1);\n\t\t\t glyph.setLabel(hostCSG.label);\n\t\t }\n\t\t}\n\t const newCSG = new GlyphsetCSG(glyphset);\t\n\t return newCSG;\n\t }\n\n\t return undefined;\n }\n \n};\n\nexports.GlyphsetCSG = GlyphsetCSG;\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/webpack/bootstrap","webpack://Zinc/./src/zinc.js","webpack://Zinc/external \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external \"three\"","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/external \"three-spritetext\"","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loaders/JSONLoader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/texture/textureArray.js","webpack://Zinc/./src/texture/texture.js","webpack://Zinc/./src/primitives/textureSlides.js","webpack://Zinc/./src/shaders/textureSlide.js","webpack://Zinc/./src/primitives/texturePrimitive.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/./src/loaders/STLLoader.js","webpack://Zinc/./src/loaders/OBJLoader.js","webpack://Zinc/./src/loaders/primitivesLoader.js","webpack://Zinc/./src/loaders/GLTFToZincJSLoader.js","webpack://Zinc/external \"three/examples/jsm/loaders/GLTFLoader\"","webpack://Zinc/./src/sceneExporter.js","webpack://Zinc/./src/three/GLTFExporter.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/region.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external \"webworkify-webpack\"","webpack://Zinc/external \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js"],"names":["require","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Lines","TextureArray","TextureSlides","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","ZincObject","call","videoHandler","isGeometry","createMesh","geometryIn","materialIn","options","geometry","morph","toBufferGeometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","localMorphColour","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","mesh","Mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","setWireframe","wireframe","prototype","Object","create","THREEGeometry","uniqueiId","getUniqueId","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","closestVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","region","animationClip","markerMode","uuid","setDuration","durationIn","getDuration","setRegion","getRegion","morphNormalsReady","computeMorphNormals","toIndexedBufferGeometry","copyMorphColorsToIndexedBufferGeometry","clone","colorsNeedUpdate","computeBoundingSphere","checkAndCreateTransparentMesh","secondaryMaterial","FrontSide","renderOrder","name","BackSide","needsUpdate","add","checkAndRemoveTransparentMesh","remove","uncache","AnimationObjectGroup","AnimationMixer","morphAttribute","position","normal","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","matrixAutoUpdate","setFrustumCulled","setAttribute","getAttribute","setName","groupNameIn","getCurrentTime","ratio","time","_clip","updateMorphColorAttribute","targetGeometry","morphColors","influences","morphTargetInfluences","deleteAttribute","bound","morphArray","setMorphTime","timeChanged","actualDuration","newTime","isTimeVarying","update","getVisibility","visible","setVisibility","pickableUpdateRequired","setAlpha","alpha","transparentChanged","flag","frustumCulled","setVertexColors","getColour","setColour","getColourHex","getHexString","setColourHex","hex","setHex","setMaterial","dispose","getClosestVertexIndex","closestIndex","setFromBufferAttribute","center","getCenter","distance","currentDistance","current","count","fromArray","array","distanceTo","getClosestVertex","applyMatrixWorld","found","multiplyScalar","applyMatrix4","matrixWorld","getBoundingBox","box","setFromArray","set","updateWorldMatrix","markerIsEnabled","displayMarkers","updateMarker","playAnimation","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","getClosestVertexDOMElementCoords","scene","inView","project","Math","getZincCameraControls","getRelativeCoordsFromNDC","setMarkerMode","mode","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","MathUtils","generateUUID","type","colors","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","matrix","vertex","normalMatrix","Matrix3","getNormalMatrix","il","face","applyMatrix3","normalize","j","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","index","console","error","groups","group","start","getX","computeFaceNormals","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","Array","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","Sphere","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","k","kl","mergeMesh","isMesh","mergeVertices","precisionPoints","verticesMap","unique","changes","precision","pow","key","round","faceIndicesToRemove","indices","n","idx","splice","diff","points","point","l","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","value","enabled","getNormalIndex","hash","toString","normalsHash","getColorIndex","r","g","colorsHash","getHex","getUvIndex","uvsHash","data","metadata","version","generator","parameters","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","computeGroups","DirectGeometry","fromGeometry","buffergeometry","positions","Float32Array","BufferAttribute","copyVector3sArray","copyColorsArray","copyVector2sArray","attribute","Float32BufferAttribute","copyVector4sArray","buffer","copyArray","colorArray","colorsArray","setIndex","normalsArray","computeTangents","computeLineDistances","applyMatrix","warn","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","isVector3","isArray","isColor","resolveURL","url","actualURL","prefix","test","callback","errorCallback","request","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","urls","partialCallback","text","urlIndex","result","numComplete","numUrls","getColorsRGB","index_in_colors","floor","remainder","hex_value","mycolor","copyMorphColorsToBufferGeometry","bufferGeometry","morphColor","tolerance","Number","EPSILON","hashToIndex","getIndex","vertexCount","nextIndex","attributeNames","keys","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","itemSize","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","isInterleavedBufferAttribute","setArray","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","markerImage","Image","src","texture","Texture","image","size","zincObject","spriteMaterial","sprite","Group","parent","isMarker","initialise","SpriteMaterial","alphaTest","depthTest","depthWrite","sizeAttenuation","Sprite","porportion","setSpriteSize","clear","shader","vertexShader","replace","join","idIn","glyphsetIn","FaceColors","label","labelString","isGlyph","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","Label","getGroup","getLabel","getMesh","setTransformation","axis1","axis2","axis3","elements","SpriteText","default","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","_current_positions","_current_axis1s","_current_axis2s","_current_axis3s","_current_scales","_current_colors","_glyph_axis_array","load","glyphsetData","glyphURL","finishCallback","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","loader","InstancedMesh","parse","meshloader","materials","crossOrigin","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","setRGB","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","tempGeometry","getMatrixAt","setFromMatrixPosition","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","VideoHandler","manager","withCredentials","paramsString","onLoad","onProgress","onError","texturePath","extractUrlBase","params","split","paramsStrings","setWithCredentials","json","JSON","toLowerCase","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","dstNormals","srcNormals","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","concat","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","singleSided","flipSided","specularCoef","shininess","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","textureLoader","TextureLoader","materialLoader","MaterialLoader","loadTexture","path","repeat","wrap","anisotropy","setCrossOrigin","wrapS","RepeatWrapping","wrapT","MirroredRepeatWrapping","textures","blending","specular","emissive","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","getCircularTexture","setSize","setSizeAttenuation","_inverseMatrix","_ray","Ray","_sphere","_position","_morphA","_tempA","PointsMaterial","updateMorphTargets","raycast","raycaster","intersects","threshold","drawRange","ray","intersectsSphere","invert","localThreshold","localThresholdSq","isBufferGeometry","positionAttribute","morphPosition","end","calculatePosition","testPoint","morphTargetDictionary","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","origin","near","far","distanceToRay","morphInfluences","influence","addScaledVector","sub","isLines","createLineSegment","line","LineSegments","setWidth","width","linewidth","_start","_end","Line","isLineSegments","_morphB","_tempB","LineBasicMaterial","vStart","vEnd","interSegment","interRay","step","distSq","distanceSqToSegment","faceIndex","isTextureArray","loadFromImages","srcArrays","h","isLoading","canvas","dataStacks","imageToUint8Array","height","fullArray","forEach","impl","DataTexture2DArray","depth","getMaterial","vs","fs","ShaderMaterial","uniforms","fragmentShader","glslVersion","isTexture","loadImage","img","Promise","resolve","reject","onload","onerror","ctx","getContext","drawImage","getImageData","isReady","textureIn","TexturePrimitive","isTextureSlides","textureSettings","idTextureMap","createSlides","slideSettings","slide","createSlide","setUniformSlideSettingsOfMesh","settings","direction","modifySlideSettings","PlaneGeometry","getUniforms","diffuse","getTextureSettings","getSlides","children","removeSlide","removeSlideWithId","getObjectById","findIndex","item","makeEmpty","expandByPoint","GLSL3","isTexturePrimitive","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","onWindowResize","localRect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","isWebGL2","capabilities","SceneLoader","SceneExporter","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","sceneLoader","minimap","rootRegion","Region","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","pickableObjectsList","forcePickableObjectsUpdate","getDownloadProgress","aspect","updateProjectionMatrix","onResize","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","viewPort","setFromObject","setCurrentCameraSettings","setupMultipleViews","defaultView","entries","viewport","addViewport","setDefaultViewport","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","findPointsetsWithGroupName","findGlyphsetsWithGroupName","findLinesWithGroupName","findObjectsWithGroupName","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","objectsArray","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","zincObjects","getNamedObjectsScreenXY","addZincObject","calculateMaxAllowedDistance","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","loadGLTF","removeObject","toBeDownloaded","pause","setTime","myPlayRate","setVideoHandler","videoHandlerIn","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","objectIsInRegion","alignBoundingBoxToCameraView","transitionTime","targetPosition","eyePosition","upVector","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","updatePickableThreeJSObjects","getPickableThreeJSObjects","checkPickableUpdateRequred","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","exportGLTF","binary","exporter","getRootRegion","STLLoader","OBJLoader","PrimitivesLoader","createNewURL","reference","newURL","URL","href","progressMap","viewLoaded","errorDownload","primitivesLoader","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","loadMultipleViews","referenceURL","views","Default","Inline","Entries","promises","fetch","then","response","catch","all","values","entry","setCurrentViewport","xmlhttp","viewData","requestURL","number","filename","targetRegion","numberOfResources","linesloader","newLines","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","objloader","traverse","child","zincGeometry","addMeshToZincGeometry","loadSurfaceURL","fileFormat","metaFinishCallback","numberOfDownloaded","downloadedItem","addZincGeometry","newGeometry","parseDuration","durationString","match","loadSettings","readPrimitivesItem","order","FileFormat","AnatomicalId","compression","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","GLTFToZincJSLoader","loadRegions","currentRegion","regions","Primitives","primitive","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","getNumberOfDownloadsInArray","includeViews","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","Version","Regions","readVersionOneRegionPath","RegionPath","loadVersionOne","numberOfObjects","loadVersionTwo","Settings","Views","responseURL","setPath","setResponseType","setRequestHeader","requestHeader","e","itemError","matchDataViewAt","query","reader","getUint8","binData","array_buffer","charCodeAt","DataView","n_faces","getUint32","byteLength","solid","off","defaultR","defaultG","defaultB","hasColors","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","componentIdx","patternSolid","patternFace","faceCounter","patternFloat","patternVertex","RegExp","patternNormal","groupCount","startVertex","endVertex","exec","vertexCountPerFace","normalCountPerFace","parseFloat","addGroup","decodeText","_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_vA","_vB","_vC","_ab","_cb","ParserState","state","objects","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","hasUVIndices","smooth","startMaterial","libraries","previous","inherited","mtllib","groupStart","groupEnd","cloned","bind","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","dst","addVertexPoint","addVertexLine","addNormal","addFaceNormal","addColor","addUV","addDefaultUV","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","nLen","uvLen","addPointGeometry","vi","addLineGeometry","uvi","setMaterials","indexOf","lines","lineFirstChar","lineLength","trimLeft","trim","charAt","lineData","substr","vertexData","faceVertices","vertexParts","lineParts","substring","lineVertices","lineUVs","parts","li","llen","pointData","hasPrimitives","hasVertexColors","createdMaterials","miLen","sourceMaterial","materialHash","materialLine","Material","materialPoints","flatShading","concurrentDownloads","waitingList","onLoadCallback","onFinally","onErrorCallback","loadFromWaitingList","shift","GLTFLoader","parseGLTFObjects","rotation","quaternion","setCamera","cameraControls","lastIndexOf","gltf","log","GLTFExporter","getAllObjects","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","unregister","input","onDone","GLTFWriter","plugins","setPlugins","write","WEBGL_CONSTANTS","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","CLAMP_TO_EDGE","MIRRORED_REPEAT","REPEAT","THREE_TO_WEBGL","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","ClampToEdgeWrapping","PATH_PROPERTIES","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","every","element","stringToArrayBuffer","window","TextEncoder","encode","ArrayBuffer","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","cachedCanvas","pending","buffers","byteOffset","nodeMap","Map","skins","extensionsUsed","uids","uid","asset","cache","meshes","attributesNormalized","images","trs","onlyVisible","truncateDrawRange","embedImages","maxTextureSize","includeCustomExtensions","processInput","blob","Blob","extensionsUsedList","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","setUint32","jsonChunk","stringify","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","uri","serializeUserData","objectDef","gltfExtensions","extensionName","extensions","extras","message","getUID","has","isNormalizedNormalAttribute","abs","createNormalizedNormalAttribute","setX","setXYZ","applyTextureTransform","mapDef","didTransform","transformDef","toArray","processBuffer","processBufferView","componentType","bufferViews","componentSize","dataView","setFloat32","setUint16","setUint8","bufferViewDef","byteStride","processBufferViewImage","processAccessor","Error","end2","bufferViewTarget","minMax","bufferView","accessorDef","normalized","accessors","processImage","flipY","cachedImages","mimeType","RGBAFormat","imageDef","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","Uint8ClampedArray","putImageData","ImageData","toBlob","bufferViewIndex","toDataURL","processSampler","samplers","samplerDef","processTexture","textureDef","sampler","_invokeAll","ext","writeTexture","processMaterial","isShaderMaterial","materialDef","pbrMetallicRoughness","isMeshStandardMaterial","isMeshBasicMaterial","baseColorFactor","metallicFactor","metalness","roughnessFactor","roughness","metalRoughMapDef","metallicRoughnessTexture","baseColorMapDef","baseColorTexture","emissiveIntensity","maxEmissiveComponent","emissiveFactor","emissiveMapDef","emissiveTexture","normalMapDef","normalTexture","occlusionMapDef","texCoord","aoMapIntensity","strength","occlusionTexture","alphaMode","alphaCutoff","doubleSided","writeMaterial","processMesh","meshCacheKeyParts","meshCacheKey","isLineLoop","meshDef","primitives","targets","nameConversion","skinWeight","skinIndex","originalNormal","modifiedAttribute","attributeName","toUpperCase","validVertexAttributes","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","morphTargetsRelative","isMultiMaterial","cacheKey","writeMesh","processCamera","cameras","isOrtho","isOrthographicCamera","cameraDef","orthographic","xmag","right","ymag","zfar","znear","perspective","aspectRatio","yfov","degToRad","fov","processAnimation","root","Utils","mergeMorphTargetTracks","tracks","channels","track","trackBinding","PropertyBinding","parseTrackName","trackNode","findNode","nodeName","trackProperty","propertyName","objectName","isSkinnedMesh","skeleton","getBoneByName","objectIndex","outputItemSize","times","interpolation","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","getInterpolation","InterpolateDiscrete","node","processSkin","nodes","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","boneInverses","multiply","bindMatrix","skin","processNode","nodeDef","translation","meshIndex","isCamera","nodeIndex","writeNode","processScene","scenes","sceneDef","processObjects","beforeParse","objectsWithoutScene","afterParse","func","light","isLight","isDirectionalLight","isPointLight","isSpotLight","lightDef","intensity","spot","innerConeAngle","penumbra","outerConeAngle","decay","lights","isGLTFSpecularGlossinessMaterial","extensionDef","diffuseFactor","specularFactor","glossinessFactor","glossiness","diffuseTexture","specularMapDef","specularGlossinessTexture","insertKeyframe","valueSize","getValueSize","TimeBufferType","ValueBufferType","interpolant","evaluate","slice","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","propertyIndex","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","setInterpolation","InterpolateLinear","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","nearPlane","farPlane","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","SYNC_CONTROL","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","ROTATE_DIRECTION","FREE","HORIZONTAL","VERTICAL","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","scrollRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","mouseScroll","rotateMode","_state","zincRayCaster","targetTouchId","rect","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setRotationMode","getNDCFromDocumentCoords","positionIn","updateRect","out_x","out_y","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentEnter","forced","observer","IntersectionObserver","boundingClientRect","disconnect","observe","onDocumentWheelEvent","deltaY","stopImmediatePropagation","fact","unproject","getVectorsFromRotateAboutLookAtPoints","axis","dot","up","rel_eyea","rel_eyeb","rel_eyec","upa","upb","upc","cos_angle","cos","sin_angle","sin","returned_values","tumble","delta_x","delta_y","tangent_dist","phi","acos","PI","calculateZoomDelta","changeZoomByValue","dist","near_far_minimum_ratio","flyZoom","directionalLightIn","addEventListener","removeEventListener","loadPath","pathData","CameraPath","NumberOfPoints","loadPathURL","path_url","updateTime","getTime","timeIn","getNumberOfTimeFrame","getCurrentTimeFrame","setCurrentTimeFrame","targetTimeFrame","updatePath","time_frame","bot_pos","top_pos","calculatePathNow","handleSyncControl","triggerCallback","zoom","controlEnabled","isTransitionCompleted","ROTATE_CAMERA_TRANSITION","stopOnCameraInput","playPath","stopPath","isPlayingPath","enableDirectionalLightUpdateWithPath","enableDeviceOrientation","ModifiedDeviceOrientationControls","disableDeviceOrientation","isDeviceOrientationEnabled","newViewport","view_angle","clip_distance","eyex","eyey","eyez","eye_distance","tan","localEyePosition","localNearPlane","nearClippingFactor","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","isSyncControl","currentMpde","enableSyncControl","NDCCameraControl","disableSyncControl","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hoverCallbackFunction","Raycaster","mouse","awaiting","lastHoveredDate","lastHoveredEmpty","timeDiff","pickedObjects","lastPosition","zincCamera","getIntersectsObject","threejsScene","setFromCamera","intersectObjects","hovered","setTimeout","awaitMove","tumbleAxis","computeTumbleAxisAngle","tumbleDirection","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","_stereo","updateMatrixWorld","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","orientation","setObjectQuaternion","zee","euler","Euler","q0","Quaternion","q1","beta","gamma","orient","setFromEuler","setFromAxisAngle","applyQuaternion","connect","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","parentIn","tMatrix","isRegion","hideAllPrimitives","showAllPrimitives","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","createChild","getChildWithName","childName","lowerChildName","findChildFromSeparatedPath","pathArray","findChildFromPath","createChildFromSeparatedPath","createChildFromPath","transverse","objectsList","boundingBox1","childObjects","lowerObjectName","lowerGroupName","primitivesArray","geometriesArray","filter","pointsetsArray","glyphsetsArray","linesArray","getChildRegions","allObjects","targetScene","helper","positionAttributes","_box","_center","coord","new_coord","diameter","getBoundary","v4","cameraControl","ThreeBSP","work","BufferGeometryLoader","hostIn","host","core","worker","myResolve","createGeometryFromJSON","JSONParser","workerEventHandler","ev","action","csg","GeometryCSGInternal","postMessage","getHostGeometry","tempCSG","createZincGeometry","getGeometry","csgMesh","newMesh","toMesh","setCSG","CSG","sendToWork","guestGeometry","intersect","newCSG","subtract","terminateWorker","terminate","COPLANAR","FRONT","BACK","SPANNING","_length_i","polygon","polygons","Node","tree","Polygon","Vertex","Face4","calculateProperties","other_tree","clipTo","build","allPolygons","toGeometry","polygon_vertice_count","vertex_idx_a","vertex_idx_b","vertex_idx_c","verticeUvs","getInverse","polygon_count","vertice_dict","setFromRotationMatrix","vertice_count","flip","classifyVertex","side_value","classifySide","classification","num_positive","num_negative","splitPolygon","coplanar_front","coplanar_back","front","back","ti","tj","vj","t","interpolate","scalar","lerp","other","divider","isConvex","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"mappings":"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","file":"zinc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, function() {\nreturn "," \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 = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","require(\"url-polyfill\");\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = \"1.0.12\";\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Lines = require('./primitives/lines').Lines;\n this.TextureArray = require('./texture/textureArray').TextureArray;\n this.TextureSlides = require('./primitives/textureSlides').TextureSlides;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n /**\n * Create the mesh for rendering\n * \n * @param {THREE.Geomtry} geometryIn - Geometry to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the geometry.\n * @param {Object} options - Provide various options\n * @param {THREE.Color} options.colour - colour to be set for the geometry\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the geometry is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n * @param {Number} options.opacity - Opacity to be set for the geometry\n */\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (this.geometry && this.morph && (geometryIn != undefined))\n\t\t\treturn;\n\t\t// First copy the geometry\n\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\n\t\tlet isTransparent = false;\n\t\tif (1.0 > options.opacity)\n\t\t\t isTransparent = true;\n\n\t\tlet material = undefined;\n\t\tif (geometry._video === undefined) {\n const morphTargets = options.localTimeEnabled || options.localMorphColour;\n\t\t\tif (materialIn) {\n\t\t\t\tmaterial = materialIn;\n\t\t\t\tmaterial.morphTargets = morphTargets;\n\t\t\t\tmaterial.morphNormals = options.localTimeEnabled;\n\t\t\t} else {\n\t\t\t\tif (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : morphTargets,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : morphTargets,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\tvertexColors : THREE.VertexColors,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t//material = PhongToToon(material);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n\t\t\t\tmaterial.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n\t\t\t}\n\t\t} else {\n\t\t\tlet videoTexture = geometry._video.createCanvasVideoTexture();\n\t\t\tmaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\tcolor : new THREE.Color(1, 1, 1),\n\t\t\t\ttransparent : isTransparent,\n\t\t\t\topacity : options.opacity,\n\t\t\t\tmap : videoTexture,\n\t\t\t\tside : THREE.DoubleSide\n\t\t\t});\n\t\t\tthis.videoHandler = geometry._video;\n\t\t}\n\t\tlet mesh = new THREE.Mesh(geometry, material); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\n /**\n * Calculate the UV for texture rendering.\n */\n\tthis.calculateUVs = () => {\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\t\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('../three/Geometry').Geometry;\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"pr\" + uniqueiId++;\n}\n\n/**\n * Provides the base object for other primitive types.\n * This class contains multiple base methods.\n * \n * @class\n * @author Alan Wu\n * @return {ZincObject}\n */\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n this.secondaryMesh = undefined;\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = {};\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerUpdateRequired = true;\n this.closestVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this._vertex = new THREE.Vector3();\n this.anatomicalId = undefined;\n this.region = undefined;\n this.animationClip = undefined;\n this.markerMode = \"inherited\";\n this.uuid = getUniqueId();\n}\n\n/**\n * Set the duration of the animation of this object.\n * \n * @param {Number} durationIn - Duration of the animation.\n */\nZincObject.prototype.setDuration = function(durationIn) {\n this.duration = durationIn;\n if (this.clipAction) {\n this.clipAction.setDuration(this.duration);\n }\n}\n\n/**\n * Get the duration of the animation of this object.\n * \n * @return {Number}\n */\nZincObject.prototype.getDuration = function() {\n return this.duration;\n}\n\n/**\n * Set the region this object belongs to.\n * \n * @param {Region} region\n */\nZincObject.prototype.setRegion = function(region) {\n this.region = region;\n}\n\n/**\n * Get the region this object belongs to.\n * \n * @return {Region}\n */\nZincObject.prototype.getRegion = function() {\n return this.region;\n}\n\n/**\n * Convert a {THREE.Geometry} into a {THREE.BufferGeometry}.\n */\nZincObject.prototype.toBufferGeometry = function(geometryIn, options) {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && !geometryIn.morphNormalsReady && \n (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toIndexedBufferGeometry();\n if (options.localMorphColour) {\n require(\"../utilities\").copyMorphColorsToIndexedBufferGeometry(geometryIn, geometry);\n }\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\n/**\n * Handle transparent mesh, create a clone for backside rendering if it is\n * transparent.\n */\nZincObject.prototype.checkAndCreateTransparentMesh = function() {\n if (this.isGeometry && this.morph.material && this.morph.material.transparent) {\n if (!this.secondaryMesh) {\n let secondaryMaterial = this.morph.material.clone();\n secondaryMaterial.side = THREE.FrontSide;\n this.secondaryMesh = new THREE.Mesh(this.morph.geometry, secondaryMaterial);\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n this.secondaryMesh.userData = this;\n this.secondaryMesh.name = this.groupName;\n }\n this.morph.material.side = THREE.BackSide;\n this.morph.material.needsUpdate = true;\n this.morph.add(this.secondaryMesh);\n this.animationGroup.add(this.secondaryMesh);\n }\n}\n\n/**\n * Handle transparent mesh, remove a clone for backside rendering if it is\n * transparent.\n */\nZincObject.prototype.checkAndRemoveTransparentMesh = function() {\n if (this.isGeometry && this.secondaryMesh) {\n this.morph.remove(this.secondaryMesh);\n this.animationGroup.uncache(this.secondaryMesh);\n this.animationGroup.remove(this.secondaryMesh);\n }\n this.morph.material.side = THREE.DoubleSide;\n}\n\n/**\n * Set the mesh function for zincObject.\n * \n * @param {THREE.Mesh} mesh - Mesh to be set for this zinc object.\n * @param {Boolean} localTimeEnabled - A flag to indicate either the mesh is\n * time dependent.\n * @param {Boolean} localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\nZincObject.prototype.setMesh = function(mesh, localTimeEnabled, localMorphColour) {\n this.animationGroup = new THREE.AnimationObjectGroup(mesh);\n this.mixer = new THREE.AnimationMixer(this.animationGroup);\n this.geometry = mesh.geometry;\n this.clipAction = undefined;\n if (this.geometry && this.geometry.morphAttributes) {\n let morphAttribute = this.geometry.morphAttributes.position;\n if (!morphAttribute) {\n morphAttribute = this.geometry.morphAttributes.color ?\n this.geometry.morphAttributes.color :\n this.geometry.morphAttributes.normal;\n }\n if (morphAttribute) {\n this.animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n morphAttribute, 10, true);\n if (this.animationClip && (this.animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(this.animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n this.morph = mesh;\n this.morph.userData = this;\n this.morph.matrixAutoUpdate = false;\n this.checkAndCreateTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n } else {\n if (this.morphColour) {\n this.geometry.setAttribute('morphTarget0', this.geometry.getAttribute( 'position' ) );\n this.geometry.setAttribute('morphTarget1', this.geometry.getAttribute( 'position' ) );\n }\n }\n this.boundingBoxUpdateRequired = true;\n}\n\n/**\n * Set the name for this ZincObject.\n * \n * @param {String} groupNameIn - Name to be set.\n */\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n if (this.morph) {\n this.morph.name = this.groupName;\n }\n if (this.secondaryMesh) {\n this.secondaryMesh.name = this.groupName;\n }\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\nconst updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry && targetGeometry.morphAttributes &&\n targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.isTimeVarying()) {\n this.mixer.update( 0.0 );\n }\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n updateMorphColorAttribute(this.geometry, this.morph);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.morph ? this.morph.visible : false;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n if (this.morph.visible !== visible) {\n this.morph.visible = visible;\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this.morph.material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n let transparentChanged = material.transparent == isTransparent ? false : true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n if (transparentChanged)\n if (isTransparent)\n this.checkAndCreateTransparentMesh();\n else\n this.checkAndRemoveTransparentMesh();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.opacity = alpha;\n}\n\n/**\n * The rendering will be culled if it is outside of the frustrum\n * when this flag is set to true, it should be set to false if\n * morphing is enabled.\n * \n * @param {Boolean} flag - Set frustrum culling on/off based on this flag.\n */\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\n/**\n * Set rather a zinc object should be displayed using per vertex colour or\n * not.\n * \n * @param {Boolean} vertexColors - Set display with vertex color on/off.\n */\nZincObject.prototype.setVertexColors = function(vertexColors) {\n this.morph.material.vertexColors = vertexColors;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.vertexColors = vertexColors;\n}\n\n/**\n * Get the colour of the mesh.\n * \n * @return {THREE.Color}\n */\nZincObject.prototype.getColour = function() {\n if (this.morph && this.morph.material)\n return this.morph.material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the mesh.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this.morph.material.color = colour;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n}\n\n/**\n * Get the colour of the mesh in hex string form.\n * \n * @return {String}\n */\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour) {\n if (this.morph && this.morph.material && this.morph.material.color)\n return this.morph.material.color.getHexString();\n }\n return undefined;\n}\n\n/**\n * Set the colour of the mesh using hex in string form.\n * \n * @param {String} hex - The colour value in hex form.\n */\nZincObject.prototype.setColourHex = function(hex) {\n this.morph.material.color.setHex(hex);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color.setHex(hex);\n}\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this.morph.material = material;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material) {\n this.secondaryMesh.material.dispose();\n this.secondaryMesh.material = material.clone()\n this.secondaryMesh.material.side = THREE.FrontSide;\n }\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n * \n * @return {Number} - integer index in the array\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n if (this.morph) {\n let position = this.morph.geometry.attributes.position;\n let boundingBox = new THREE.Box3().setFromBufferAttribute(position);\n let center = new THREE.Vector3();\n boundingBox.getCenter(center);\n if (position && boundingBox) {\n let distance = -1;\n let currentDistance = 0;\n let current = new THREE.Vector3();\n for (let i = 0; i < position.count; i++) {\n current.fromArray(position.array, i * 3);\n currentDistance = current.distanceTo(center);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n * \n * @return {THREE.Vector3}\n */\nZincObject.prototype.getClosestVertex = function(applyMatrixWorld) {\n let position = new THREE.Vector3();\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = this.morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._vertex.fromArray(\n attributes.position[i].array, this.closestVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found) {\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n }\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.closestVertexIndex * 3);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.morph && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = undefined;\n if (this.morph.geometry)\n attributes = this.morph.geometry.morphAttributes;\n let found = false;\n if (influences && attributes && attributes.position) {\n let min = new THREE.Vector3();\n let max = new THREE.Vector3();\n let box = new THREE.Box3();\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n box.setFromArray(attributes.position[i].array);\n min.add(box.min.multiplyScalar(influences[i]));\n max.add(box.max.multiplyScalar(influences[i]));\n }\n }\n if (found)\n this.cachedBoundingBox.set(min, max);\n }\n if (!found) {\n this.cachedBoundingBox.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n }\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n}\n\n/**\n * Clear this geometry and free the memory.\n */\nZincObject.prototype.dispose = function() {\n if (this.morph && this.morph.geometry)\n this.morph.geometry.dispose();\n if (this.morph && this.morph.material)\n this.morph.material.dispose();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.dispose();\n if (this.geometry)\n this.geometry.dispose();\n this.animationGroup = undefined;\n this.mixer = undefined;\n this.morph = undefined;\n this.clipAction = undefined;\n this.groupName = undefined;\n}\n\n/**\n * Check if marker is enabled based on the objects settings with \n * the provided scene options.\n * \n * @return {Boolean} \n */\nZincObject.prototype.markerIsEnabled = function(options) {\n if (this.markerMode === \"on\" || (options && options.displayMarkers &&\n (this.markerMode === \"inherited\"))) {\n \n return true;\n }\n return false;\n}\n\n/**\n * Update the marker's position and size based on current viewport. \n */\nZincObject.prototype.updateMarker = function(playAnimation, options) {\n if ((playAnimation == false) &&\n (this.markerIsEnabled(options)))\n {\n if (this.groupName) {\n if (!this.marker) {\n this.marker = new (require(\"./marker\").Marker)(this);\n this.markerUpdateRequired = true;\n }\n if (this.markerUpdateRequired) {\n let position = this.getClosestVertex(false);\n if (position) {\n this.marker.setPosition(position.x, position.y, position.z);\n this.markerUpdateRequired = false;\n }\n }\n if (options && options.camera && options.markerDepths) {\n options.markerDepths.push(\n this.marker.updateNDC(options.camera.cameraObject));\n }\n if (!this.marker.isEnabled()) {\n this.marker.enable();\n this.morph.add(this.marker.morph);\n }\n }\n } else {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.disable();\n this.morph.remove(this.marker.morph);\n }\n this.markerUpdateRequired = true;\n }\n}\n\nZincObject.prototype.processMarkerVisual = function(min, max) {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.updateVisual(min, max);\n }\n}\n\nZincObject.prototype.initiateMorphColor = function() {\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true))) {\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n}\n\nZincObject.prototype.setRenderOrder = function(renderOrder) {\n if (this.morph && (renderOrder !== undefined)) {\n this.morph.renderOrder = renderOrder;\n if (this.secondaryMesh)\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n }\n}\n\n/**\n * Get the windows coordinates.\n * \n * @return {Object} - position and rather the closest vertex is on screen.\n */\nZincObject.prototype.getClosestVertexDOMElementCoords = function(scene) {\n if (scene && scene.camera) {\n let inView = true;\n const position = this.getClosestVertex(true);\n position.project(scene.camera);\n position.z = Math.min(Math.max(position.z, 0), 1);\n if (position.x > 1 || position.x < -1 || position.y > 1 || position.y < -1) {\n inView = false;\n }\n scene.getZincCameraControls().getRelativeCoordsFromNDC(position.x, position.y, position);\n return {position, inView};\n } else {\n return undefined;\n }\n}\n\n/**\n * Set marker mode for this zinc object which determine rather the\n * markers should be displayed or not.\n *\n * @param {string} mode - There are three options:\n * \"on\" - marker is enabled regardless of settings of scene\n * \"off\" - marker is disabled regardless of settings of scene\n * \"inherited\" - Marker settings on scene will determine the visibility\n * of the marker.\n * \n * @return {Boolean} \n */\n ZincObject.prototype.setMarkerMode = function(mode) {\n if (mode !== this.markerMode) {\n if (mode === \"on\" || mode === \"off\") {\n this.markerMode = mode;\n } else {\n this.markerMode = \"inherited\";\n }\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n}\n\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation, options) {\n if (playAnimation == true)\n {\n if ((this.clipAction) && this.isTimeVarying()) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n if (delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true)))\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\nexports.ZincObject = ZincObject;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n this.normals = [];\n this.uvs = [];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\tthis.morphNormalsReady = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst 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\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n return vertices;\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\tlet vertexNormals = tmpGeo.computeVertexNormals();\n\n if (vertexNormals && vertexNormals.length > 0) {\n this.morphTargets[i].normals = new Array( this.vertices.length );\n\n for ( let v = 0; v < vertexNormals.length; v ++ ) {\n \n this.morphTargets[i].normals[ v ] = vertexNormals[v].clone();\n \n }\n }\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n this.morphNormalsReady = true;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\n\tcomputeGroups( ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\treturn groups;\n\n\t},\n\n\ttoBufferGeometry: function () {\n\n\t\tconst geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tbuffergeometry.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n toIndexedBufferGeometry: function () {\n\n\t\t//const geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( this.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( this.vertices ) );\n\n\t\tif ( this.normals.length > 0 ) {\n\t\t\tconst normals = new Float32Array( this.normals.length );\n let buffer = new BufferAttribute( normals, 3 ).copyArray( this.normals );\n\t\t\tbuffergeometry.setAttribute( 'normal', buffer);\n\t\t}\n if ( this.uvs.length > 0 && this.uvs[0].length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( this.uvs[0].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyArray( this.uvs[0] ) );\n\t\t}\n\n\t\tif ( this.uvs.length > 1 && this.uvs[1].length > 0 ) {\n\t\t\tconst uvs2 = new Float32Array( this.uvs[1].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyArray( this.uvs[1] ) );\n\t\t}\n\n if ( this.colors.length > 0) {\n\n const colorArray = [];\n for (let i = 0 ; i < this.colors.length; i++) {\n colorArray.push(new Color( this.colors[ i ] ));\n }\n const colors = new Float32Array( colorArray.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( colorArray ) );\n\n } else {\n\n const colorsArray = new Float32Array( this.vertices.length * 3 );\n for (let i = 0; i < this.vertices.length * 3; i++) {\n colorsArray[i] = 1.0;\n }\n buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ) );\n \n }\n\n if (this.faces.length > 0) {\n\n let colors = [];\n\n let indices = [];\n\n for (let i = 0 ; i < this.faces.length; i++) {\n\n indices.push(this.faces[i].a, this.faces[i].b, this.faces[i].c);\n\n const vertexColors = this.faces[i].vertexColors;\n \n if ( vertexColors.length === 3 ) {\n \n colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n \n } else {\n \n const color = this.faces[i].color;\n \n colors.push( color, color, color );\n \n }\n\n }\n\n // if ( colors.length > 0 ) {\n\n// const colorsArray = new Float32Array( colors.length * 3 );\n// buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ).copyColorsArray( colors ) );\n \n// }\n\n buffergeometry.setIndex( indices );\n\n buffergeometry.groups = this.computeGroups();\n\n }\n\n\t\t// morphs\n\n if (this.morphTargets.length > 0) {\n\n\t\t\tconst array = [];\n const normalsArray = [];\n\n\t\t\tfor ( let i = 0, l = this.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = this.morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.vertices.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.vertices ) );\n\n if (morphTarget.normals) {\n\n\n const attribute = new Float32BufferAttribute( morphTarget.normals.length * 3, 3 );\n attribute.name = morphTarget.name;\n\n normalsArray.push( attribute.copyVector3sArray( morphTarget.normals ) );\n \n }\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes.position = array;\n buffergeometry.morphAttributes.normal = normalsArray;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( this.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( this.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( this.skinIndices ) );\n\n\t\t}\n\n\t\tif ( this.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( this.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( this.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = this.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = this.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nGeometry.createBufferGeometryFromObject = function ( object ) {\n\n\tlet buffergeometry = new BufferGeometry();\n\n\tconst geometry = object.geometry;\n\n\tif ( object.isPoints || object.isLine ) {\n\n\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\tbuffergeometry.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\tbuffergeometry.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\tbuffergeometry.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t} else if ( object.isMesh ) {\n\n\t\tbuffergeometry = geometry.toBufferGeometry();\n\n\t}\n\n\treturn buffergeometry;\n\n};\n\nclass DirectGeometry {\n\n\tconstructor() {\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\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\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;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Face3, Geometry };\n","const THREE = require('three');\n\nfunction resolveURL(url) {\n\tlet actualURL = url;\n\tconst prefix = (require(\"./zinc\").modelPrefix);\n\t\n\tif (prefix) {\n\t\tif (prefix[prefix.length -1] != '/')\n\t\t\tprefix = prefix + '/';\n\t\tconst r = new RegExp('^(?:[a-z]+:)?//', 'i');\n\t\tif (!r.test(url)) {\n\t\t\tactualURL = prefix + url;\n\t\t}\n\t}\n\t\n\treturn actualURL;\n}\n\n//Convenient function\nfunction loadExternalFile(url, data, callback, errorCallback) {\n // Set up an asynchronous request\n const request = new XMLHttpRequest();\n request.open('GET', resolveURL(url), true);\n\n // Hook the event that gets called as the request progresses\n request.onreadystatechange = () => {\n // If the request is \"DONE\" (completed or failed)\n if (request.readyState == 4) {\n // If we got HTTP status 200 (OK)\n if (request.status == 200) {\n callback(request.responseText, data)\n } else { // Failed\n errorCallback(url);\n }\n }\n };\n\n request.send(null); \n}\n\nfunction loadExternalFiles(urls, callback, errorCallback) {\n const numUrls = urls.length;\n let numComplete = 0;\n const result = [];\n\n // Callback for a single file\n function partialCallback(text, urlIndex) {\n result[urlIndex] = text;\n numComplete++;\n\n // When all files have downloaded\n if (numComplete == numUrls) {\n callback(result);\n }\n }\n\n for (let i = 0; i < numUrls; i++) {\n \tloadExternalFile(urls[i], i, partialCallback, errorCallback);\n }\n}\n\n\n//Get the colours at index\nexports.getColorsRGB = (colors, index) => {\n const index_in_colors = Math.floor(index/3);\n const remainder = index%3;\n let hex_value = 0;\n if (remainder == 0)\n {\n hex_value = colors[index_in_colors].r;\n }\n else if (remainder == 1)\n {\n hex_value = colors[index_in_colors].g;\n }\n else if (remainder == 2)\n {\n hex_value = colors[index_in_colors].b;\n }\n const mycolor = new THREE.Color(hex_value);\n return [mycolor.r, mycolor.g, mycolor.b];\n}\n\n\nexports.copyMorphColorsToBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( var i = 0, l = morphColors.length; i < l; i ++ ) {\n let morphColor = morphColors[ i ];\n let colorArray = [];\n\t\t for ( var j = 0; j < geometry.faces.length; j ++ ) {\n let face = geometry.faces[j];\n let color = getColorsRGB(morphColor.colors, face.a);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.b);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.c);\n colorArray.push(color[0], color[1], color[2]);\n }\n var attribute = new THREE.Float32BufferAttribute( geometry.faces.length * 3 * 3, 3 );\n attribute.name = morphColor.name;\n array.push( attribute.copyArray( colorArray ) );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n\n exports.copyMorphColorsToIndexedBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( let i = 0, l = morphColors.length; i < l; i ++ ) {\n const morphColor = morphColors[ i ];\n const colorArray = [];\n\t\t for ( let j = 0; j < morphColor.colors.length * 3; j ++ ) {\n let color = getColorsRGB(morphColor.colors, j);\n colorArray.push(color[0], color[1], color[2]);\n }\n const attribute = new THREE.Float32BufferAttribute( colorArray, 3 );\n attribute.name = morphColor.name;\n array.push( attribute );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n exports.mergeVertices = ( geometry, tolerance = 1e-4 ) => {\n\n tolerance = Math.max( tolerance, Number.EPSILON );\n\n // Generate an index buffer if the geometry doesn't have one, or optimize it\n // if it's already available.\n var hashToIndex = {};\n var indices = geometry.getIndex();\n var positions = geometry.getAttribute( 'position' );\n var vertexCount = indices ? indices.count : positions.count;\n\n // next value for triangle indices\n var nextIndex = 0;\n\n // attributes and new attribute arrays\n var attributeNames = Object.keys( geometry.attributes );\n var attrArrays = {};\n var morphAttrsArrays = {};\n var newIndices = [];\n var getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\n // initialize the arrays\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n var name = attributeNames[ i ];\n\n attrArrays[ name ] = [];\n\n var morphAttr = geometry.morphAttributes[ name ];\n if ( morphAttr ) {\n\n morphAttrsArrays[ name ] = new Array( morphAttr.length ).fill().map( () => [] );\n\n }\n\n }\n\n // convert the error tolerance to an amount of decimal places to truncate to\n var decimalShift = Math.log10( 1 / tolerance );\n var shiftMultiplier = Math.pow( 10, decimalShift );\n for ( var i = 0; i < vertexCount; i ++ ) {\n\n var index = indices ? indices.getX( i ) : i;\n\n // Generate a hash for the vertex attributes at the current index 'i'\n var hash = '';\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var itemSize = attribute.itemSize;\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n // double tilde truncates the decimal value\n hash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier ) },`;\n\n }\n\n }\n\n // Add another reference to the vertex if it's already\n // used by another index\n if ( hash in hashToIndex ) {\n\n newIndices.push( hashToIndex[ hash ] );\n\n } else {\n\n // copy data to the new index in the attribute arrays\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var morphAttr = geometry.morphAttributes[ name ];\n var itemSize = attribute.itemSize;\n var newarray = attrArrays[ name ];\n var newMorphArrays = morphAttrsArrays[ name ];\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n var getterFunc = getters[ k ];\n newarray.push( attribute[ getterFunc ]( index ) );\n\n if ( morphAttr ) {\n\n for ( var m = 0, ml = morphAttr.length; m < ml; m ++ ) {\n\n newMorphArrays[ m ].push( morphAttr[ m ][ getterFunc ]( index ) );\n\n }\n\n }\n\n }\n\n }\n\n hashToIndex[ hash ] = nextIndex;\n newIndices.push( nextIndex );\n nextIndex ++;\n\n }\n\n }\n\n // Generate typed arrays from new attribute arrays and update\n // the attributeBuffers\n const result = geometry.clone();\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n var name = attributeNames[ i ];\n var oldAttribute = geometry.getAttribute( name );\n var attribute;\n\n var buffer = new oldAttribute.array.constructor( attrArrays[ name ] );\n if ( oldAttribute.isInterleavedBufferAttribute ) {\n\n attribute = new THREE.BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.itemSize );\n\n } else {\n\n attribute = geometry.getAttribute( name ).clone();\n attribute.setArray( buffer );\n\n }\n\n result.setAttribute( name, attribute );\n\n // Update the attribute arrays\n if ( name in morphAttrsArrays ) {\n\n for ( var j = 0; j < morphAttrsArrays[ name ].length; j ++ ) {\n\n var morphAttribute = geometry.morphAttributes[ name ][ j ].clone();\n morphAttribute.setArray( new morphAttribute.array.constructor( morphAttrsArrays[ name ][ j ] ) );\n result.morphAttributes[ name ][ j ] = morphAttribute;\n\n }\n\n }\n\n }\n\n // Generate an index buffer typed array\n var cons = Uint8Array;\n if ( newIndices.length >= Math.pow( 2, 8 ) ) cons = Uint16Array;\n if ( newIndices.length >= Math.pow( 2, 16 ) ) cons = Uint32Array;\n\n var newIndexBuffer = new cons( newIndices );\n var newIndices = null;\n if ( indices === null ) {\n\n newIndices = new THREE.BufferAttribute( newIndexBuffer, 1 );\n\n } else {\n\n newIndices = geometry.getIndex().clone();\n newIndices.setArray( newIndexBuffer );\n\n }\n\n result.setIndex( newIndices );\n\n return result;\n\n}\n\nfunction PhongToToon(materialIn) {\n\tif (materialIn.isMeshPhongMaterial) {\n\t\tlet material = new THREE.MeshToonMaterial({\n\t\t\tcolor : materialIn.color.clone(),\n\t\t\tmorphTargets : materialIn.morphTargets,\n\t\t\tmorphNormals : materialIn.morphNormals,\n\t\t\tvertexColors : materialIn.vertexColors,\n\t\t\ttransparent : materialIn.transparent,\n\t\t\topacity : materialIn.opacity,\n\t\t\tside : materialIn.side\n\t\t});\n\t\tif (materialIn.map)\n\t\t\tmaterial.map = materialIn.map;\n\t\treturn material;\n\t}\n\n\treturn materialIn;\n}\n\n\nexports.resolveURL = resolveURL;\nexports.loadExternalFile = loadExternalFile;\nexports.loadExternalFiles = loadExternalFiles;\nexports.PhongToToon = PhongToToon;\n","var THREE = require('three');\nconst markerImage = new Image(128, 128);\nmarkerImage.src = require(\"../assets/mapMarker.svg\");\nconst texture = new THREE.Texture();\ntexture.image = markerImage;\ntexture.needsUpdate = true;\nconst size = [0.015, 0.02, 1];\n\n/**\n * A special graphics type with a tear drop shape.\n * It is currently used to mark the location of a\n * {@link zincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Marker}\n */\nconst Marker = function(zincObject) {\n (require('./zincObject').ZincObject).call(this);\n this.texture = texture;\n let spriteMaterial = undefined;\n let sprite = undefined;\n this.morph = new THREE.Group();\n this.parent = zincObject;\n this.isMarker = true;\n let enabled = false;\n let vector = new THREE.Vector3();\n\n\n\tlet initialise = () => {\n spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n }); \n sprite = new THREE.Sprite(spriteMaterial);\n sprite.center.set(0.5, 0);\n this.morph.add(sprite);\n this.morph.position.set(0, 0, 0);\n this.morph.renderOrder = 10000;\n sprite.scale.set(size[0], size[1], size[2]);\n sprite.userData = this;\n }\n\n this.updateVisual = (min, max) => {\n let scale = 1;\n let opacity = 1;\n let porportion = 0;\n if (min !== max) {\n porportion = (1 - (vector.z - min) / (max - min));\n scale = 0.5 + porportion * 0.5;\n opacity = 0.6 + porportion * 0.4;\n }\n sprite.material.opacity = opacity;\n this.setSpriteSize(scale);\n }\n\n this.updateNDC = camera => {\n vector.copy(this.morph.position);\n vector.project(camera);\n vector.z = Math.min(Math.max(vector.z, 0), 1);\n return vector.z;\n }\n\n /**\n * Set the position of the marker.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n this.morph.position.set(x, y, z);\n }\n\n /**\n * Set the size of the marker.\n * \n * @param {Number} size - size to be set.\n */ \n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n /**\n * Clean up this object,\n */ \n this.dispose = () => {\n if (this.morph) {\n this.morph.clear();\n }\n if (spriteMaterial) {\n spriteMaterial.dispose();\n }\n if (sprite) {\n sprite.clear();\n sprite = undefined;\n }\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n /**\n * Enable and visualise the marker.\n */ \n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n }\n\n /**\n * Disable and hide the marker.\n */ \n this.disable = () => {\n enabled = false;\n this.morph.visible = false;\n }\n\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}\n\nMarker.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Marker = Marker;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzY1IDU2MCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzY1IDU2MCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMDA1OTc0IiBkPSJNMTgyLjksNTUxLjdjMCwwLjEsMC4yLDAuMywwLjIsMC4zUzM1OC4zLDI4MywzNTguMywxOTQuNmMwLTEzMC4xLTg4LjgtMTg2LjctMTc1LjQtMTg2LjkNCgkJQzk2LjMsNy45LDcuNSw2NC41LDcuNSwxOTQuNmMwLDg4LjQsMTc1LjMsMzU3LjQsMTc1LjMsMzU3LjRTMTgyLjksNTUxLjcsMTgyLjksNTUxLjd6IE0xMjIuMiwxODcuMmMwLTMzLjYsMjcuMi02MC44LDYwLjgtNjAuOA0KCQljMzMuNiwwLDYwLjgsMjcuMiw2MC44LDYwLjhTMjE2LjUsMjQ4LDE4Mi45LDI0OEMxNDkuNCwyNDgsMTIyLjIsMjIwLjgsMTIyLjIsMTg3LjJ6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\"","\n/**\n * Provide additional shaders to render time dependent color.\n */\nexports.augmentMorphColor = function() {\n return function(shader) {\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_pars_vertex>',\n [\n\t 'varying vec3 vColor;',\n 'attribute vec3 morphColor0;',\n 'attribute vec3 morphColor1;'\n ].join( '\\n' )\n );\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_vertex>',\n [\n 'vColor.xyz = color.xyz;',\n '#ifdef USE_MORPHTARGETS',\n 'vColor = morphColor0 * morphTargetInfluences[ 0 ];',\n 'vColor += morphColor1 * morphTargetInfluences[ 1 ];',\n '#endif'\n ].join( '\\n' )\n );\n };\n}\n","const THREE = require('three');\n\n/**\n * Zinc representation of glyph graphic, it contains the colours, \n * geometry and transformation of the glyph.\n * \n * @param {THREE.Geometry} geometry - Geometry of the glyph .\n * @param {THREE.Material} materialIn - Material of the glyph.\n * @param {Number} idIn - Id of the glyph.\n * \n * @class\n * @author Alan Wu\n * @return {Glyph}\n */\nconst Glyph = function (geometry, materialIn, idIn, glyphsetIn) {\n (require('./zincObject').ZincObject).call(this);\n let material = undefined;\n if (materialIn) {\n material = materialIn.clone();\n material.vertexColors = THREE.FaceColors;\n }\n const parent = glyphsetIn;\n this.id = idIn;\n let label = undefined;\n let labelString = undefined;\n const group = new THREE.Group();\n this.isGlyph = true;\n\n /**\n * Create a glyph using mesh\n * @param {THREE.Mesh} meshIn - Mesh to create the glyph from\n *\n * @returns {Boolean} true if successful\n */\n this.fromMesh = meshIn => {\n if (meshIn && meshIn.isMesh) {\n this.morph = meshIn.clone();\n this.morph.userData = this;\n group.add(this.morph);\n return true;\n }\n return false;\n }\n\n if (geometry && material) {\n this.fromMesh(new THREE.Mesh(geometry, material));\n }\n\n /**\n * Get the {Glyphset} containing this glyph.\n *\n * @returns {Boolean} true if successful\n */\n this.getGlyphset = function () {\n return parent;\n }\n\n /**\n * Set and update the text containing this glyph.\n * @param {String} text - Label to be set for this instance\n */\n this.setLabel = text => {\n if (text && (typeof text === 'string' || text instanceof String)) {\n labelString = text;\n if (this.morph)\n this.morph.name = text;\n }\n if (label)\n this.showLabel();\n }\n\n /**\n * Display label with the choosen colour. It will replace the current\n * label.\n * @param {THREE.Color} colour - Colour for the label.\n */\n this.showLabel = (colour) => {\n if (label) {\n position = label.getPosition();\n group.remove(label.getSprite());\n label.dispose();\n label = undefined;\n }\n if (labelString && (typeof labelString === 'string' || labelString instanceof String)) {\n let position = [0, 0, 0];\n label = new (require('./label').Label)(labelString, colour);\n label.setPosition(position[0], position[1], position[2]);\n group.add(label.getSprite());\n }\n }\n\n /**\n * Get the group containing the label and mesh.\n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Get the label of this glyph\n * @return {Label}\n */\n this.getLabel = () => {\n return labelString;\n }\n\n /**\n * Get the mesh of this glyph.\n * @return {THREE.Mesh}\n */\n this.getMesh = () => {\n return this.morph;\n }\n\n /**\n * Set the transformation of this glyph.\n * @param {Array} position - Three components vectors containing position of the\n * transformation.\n * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n * transformation.\n * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n * transformation.\n * @param {Array} position - Three components vectors containing axis3 rotation of the\n * transformation.\n */\n this.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n if (label)\n label.setPosition(position[0], position[1], position[2]);\n }\n\n /**\n * Set the color of the glyph and its label.\n * \n * @param {THREE.Color} color - Colour to be set.\n */\n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n }\n\n /**\n * Clear and free its memory.\n */\n this.dispose = () => {\n if (this.material)\n this.material.dispose();\n this.morph = undefined;\n }\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\n/**\n * Bitmap labels, this is used with {@link Glyph} to \n * provide labels.\n * \n * @param {String} textIn - Text to be displayed dwith the label.\n * @param {THREE.Color} colour - Colour to be set for the label.\n * \n * @class\n * @author Alan Wu\n * @return {Label}\n */\nexports.Label = function (textIn, colour) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n /**\n * Get the current position in an array containing the x, y and z\n * coordinates.\n * \n * @return {Array}\n */\n this.getPosition = () => {\n if (sprite)\n return [sprite.position.x, sprite.position.y, sprite.position.z];\n return [0, 0, 0];\n }\n\n /**\n * Set the position of the label in 3D coordinates.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n /**\n * Set the colour of the label\n * \n * @param {THREE.Color} colour - colour to be set\n */\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n\n /**\n * Scale the label.\n * \n * @param {Number} scaling - Scale to be set.\n */\n this.setScale = scaling => {\n if (sprite && scaling > 0.0)\n sprite.scale.set(scaling, scaling, 1.0);\n }\n\n /**\n * Free up the memory\n */\n this.dispose = () => {\n sprite.dispose();\n }\n\n /**\n * Get the intrnal sprite.\n * \n * @return {THREE.Sprite}\n */\n this.getSprite = () => {\n return sprite;\n }\n\n /**\n * Get the text.\n * \n * @return {String}\n */\n this.getString = () => {\n return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loaders/JSONLoader').JSONLoader;\n\n/**\n * This is a container of {@link Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n const _current_positions = [];\n const _current_axis1s = [];\n const _current_axis2s = [];\n const _current_axis3s = [];\n const _current_scales = [];\n const _current_colors = [];\n const _glyph_axis_array = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n /**\n * Get the {@link Three.Group} containing all of the glyphs' meshes.\n * @returns {Three.Group}\n */\n this.getGroup = () => {\n return this.morph;\n }\n\n /**\n * Copy glyphset data into this glyphset then load the glyph's geoemtry \n * with the provided glyphURL. FinishCallback will be called once\n * glyph is loaded.\n * \n * @param {Array} glyphsetData - contains the informations about the glyphs.\n * @param {String} glyphURL - URL to the geometry which will be applied to all\n * all the glyphs in the glyphset once loaded.\n * @param {Function} finishCallback - User's function to be called once glyph's\n * geometry is loaded.\n */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n this.morph = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n object.geometry.dispose();\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n /**\n * Calculate the actual transformation value that can be applied \n * to the transformation matrix.\n * \n * @returns {Array}\n */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale, return_arrays) => {\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[j] + scale[j] * scaleFactors[j];\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays[0] = [final_point, final_axis1, final_axis2, final_axis3];\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays[1] = [mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3];\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[0] + scale[j] * scaleFactors[0];\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = baseSize[0] + use_scale * scaleFactors[0];\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays[k] = [final_point, final_axis1, final_axis2, final_axis3];\n }\n }\n return return_arrays;\n };\n\n /**\n * Update transformation for each of the glyph in this glyphset.\n */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n _glyph_axis_array.length = numberOfGlyphs;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale, _glyph_axis_array);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n /**\n * Update colour for each of the glyph in this glyphset.\n */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n /**\n * Update the current states of the glyphs in this glyphset, this includes transformation and\n * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n * the internal time has been updated.\n */\n const updateMorphGlyphsets = () => {\n const current_positions = _current_positions;\n const current_axis1s = _current_axis1s;\n const current_axis2s = _current_axis2s;\n const current_axis3s = _current_axis3s;\n const current_scales = _current_scales;\n const current_colors = _current_colors;\n\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n _current_positions.length = bottom_positions.length;\n _current_axis1s.length = bottom_positions.length;\n _current_axis2s.length = bottom_positions.length;\n _current_axis3s.length = bottom_positions.length;\n _current_scales.length = bottom_positions.length;\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions[i] = proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i];\n current_axis1s[i] = proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i];\n current_axis2s[i] = proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i];\n current_axis3s[i] = proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i];\n current_scales[i] = proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i];\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n current_colors.length = bottom_colors.length;\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors[i] = _bot_colour.getHex();\n }\n /*\n for (var i = 0; i < bottom_colors.length; i++) {\n current_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n }\n */\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n };\n\n /**\n * Display the label of the glyphs in the glyphset.\n */\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n /**\n * Create the glyphs in the glyphset.\n * \n * @param {Boolean} displayLabels -Flag to determine either the labels should be display or not.\n */\n const createGlyphs = (displayLabels) => {\n if ((labels != undefined) && displayLabels) {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n if (labels != undefined && labels[i] != undefined) {\n glyph.setLabel(labels[i]);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n }\n if ((labels != undefined) && displayLabels) {\n this.showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n /**\n * Add a custom {@link Glyph} to this {@link Glyphset}.\n * \n * @param {Glyph} Glyph to be added.\n */\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Add a THREE.Mesh object to be displayed as glyph in this {@link Glyphset}.\n * \n * @param {THREE.Mesh} Mesh to be added.\n * @param {Number} id of the mesh.\n */\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n /**\n * A function which iterates through the list of glyphs and call the callback\n * function with the glyph as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyph\n * as an argument.\n */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n const tempGeometry = geometry.toBufferGeometry();\n this.geometry.copy(tempGeometry);\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\n tempGeometry.dispose();\n if (materials && materials[0])\n this.morph.material = materials[0];\n createGlyphs(displayLabels);\n this.morph.name = this.groupName;\n this.morph.userData = this;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n let center = new THREE.Vector3();\n this.getBoundingBox().getCenter(center);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let position = new THREE.Vector3();\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n position.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = center.distanceTo(position);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.closestVertexIndex]) {\n glyphList[this.closestVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.closestVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get the bounding box for the whole set of glyphs.\n * \n * @return {Three.Box3};\n */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n _boundingBox2.copy(_boundingBox1).applyMatrix4(_transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n /**\n * Set the local time of this glyphset.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if ((numberOfTimeSteps > 0) && (morphColours || morphVertices))\n return true;\n return false;\n }\n\n /**\n * Get the current inbuild time of the \n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n /**\n * Clear this glyphset and its list of glyphs which will release them from the memory.\n */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n /**\n * Update the glyphsets if required the render.\n */\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('../three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('../three/Geometry').Face3;\nvar Geometry = require('../three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\nvar VideoHandler = require('../videoHandler').VideoHandler;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n this.paramsString = \"\";\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\n const params = url.split(\"?\");\n\n //There are parameters, add them to the target\n if (url.length === 2) {\n\n this.paramsString = paramsStrings[1];\n\n } else {\n\n this.paramsString = \"\";\n\n }\n\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n if (scope && scope.parse) {\n var object = scope.parse( json, texturePath );\n onLoad( object.geometry, object.materials );\n }\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n if (json.uvs) {\n\n for ( i = 0; i < json.uvs.length; i ++ ) {\n\n geometry.uvs[i] = [];\n\n for ( let k = 0; k < json.uvs[i].length ; k++ ) {\n\n geometry.uvs[i][k] = json.uvs[i][k];\n\n }\n \n }\n \n }\n\n if (normals) {\n\n for ( i = 0; i < normals.length; i ++ ) {\n\n geometry.normals[i] = normals[i];\n\n }\n \n }\n\n if (colors) {\n\n for ( i = 0; i < colors.length; i ++ ) {\n\n geometry.colors[i] = colors[i];\n\n }\n \n }\n\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\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}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\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\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\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\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\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 ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\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\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\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\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphNormals !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphNormals.length; i < l; i ++ ) {\n\n if (geometry.morphTargets[ i ]) {\n\n geometry.morphTargets[ i ].normals = [];\n\n var dstNormals = geometry.morphTargets[ i ].normals;\n var srcNormals = json.morphNormals[ i ].normals;\n\n for ( var v = 0, vl = srcNormals.length; v < vl; v += 3 ) {\n\n var normals = new Vector3();\n normals.x = srcNormals[ v ];\n normals.y = srcNormals[ v + 1 ] ;\n normals.z = srcNormals[ v + 2 ] ;\n\n dstNormals.push( normals );\n\n }\n\n geometry.morphNormalsReady = true;\n\n }\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\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 parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\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\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\n if (this.paramsString) {\n\n fullPath = fullPath + `?${this.paramsString}`;\n \n }\n\n\t\t\t\t\tconst videoHandler = new VideoHandler(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n/**\n * Provide basic functionality to display video as texture.\n * VideoTexture is used for creating and updating a video projected onto a Three.js texture\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {VideoHandler}\n */\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Pointset}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n this.isPointset = true;\n\n /** Shape of the points is created using the function below */\n const getCircularTexture = () => {\n var image = new Image();\n image.src = require(\"../assets/disc.png\");\n const texture = new THREE.Texture();\n texture.image = image;\n texture.needsUpdate = true;\n return texture;\n }\n\n /**\n * Create the pointsets using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of points to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n this.createMesh = (geometryIn, materialIn, options) => {\n if (geometryIn && materialIn) {\n let geometry = this.toBufferGeometry(geometryIn, options);\n const texture = getCircularTexture();\n materialIn.map = texture;\n let point = new Points(geometry, materialIn);\n this.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n }\n }\n\n /**\n * Set the size of the points.\n * \n * @param {Number} size - size to be set.\n */\n this.setSize = size => {\n if (this.morph && this.morph.material) {\n this.morph.material.size = size;\n this.morph.material.needsUpdate = true;\n }\n }\n\n /**\n * Turn size attenuation on/off based on the flag.\n * \n * @param {Boolean} flag - Determin either size attenuation\n * should be on or off.\n */\n this.setSizeAttenuation = flag => {\n if (this.morph && this.morph.material) {\n this.morph.material.sizeAttenuation = flag;\n this.morph.material.needsUpdate = true;\n }\n }\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ 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} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","const THREE = require('three');\n\n/**\n * Provides an object which stores lines.\n * This is created when a valid json file containing lines is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n /**\n * Create the line segements using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of lines to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ])\n\t\t\t\tmaterialIn.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n\t\t\tthis.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\n\t}\n\n\n /**\n * Set the width for the lines.\n * \n * @param {Number} width - Width of the lines.\n */\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\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// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\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// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ 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} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","const THREE = require('three');\n\n/**\n * Texture array object for holding array of images into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {TextureArray}\n */\nconst TextureArray = function () {\n (require('./texture').Texture).call(this);\n this.isTextureArray = true;\n\n\n /**\n * Read images from an array containg src locations.\n * \n * @async\n * @param {Array} srcArrays - List of source location of the images.\n */\n this.loadFromImages = async function (srcArrays) {\n let w = 1;\n let h = 1;\n let d = 0;\n if (srcArrays && srcArrays.length) {\n this.isLoading = true;\n const image = new Image();\n image.crossOrigin = \"Anonymous\";\n const canvas = document.createElement(\"canvas\");\n let length = 0;\n const dataStacks = new Array(srcArrays.length);\n for (let i = 0; i < srcArrays.length; i++) {\n const data = await this.imageToUint8Array(image, srcArrays[i], canvas);\n if (data && data.array) {\n w = data.width;\n h = data.height;\n dataStacks[d] = data.array;\n length += dataStacks[d].length;\n d++;\n }\n }\n const fullArray = new Uint8Array(length);\n length = 0;\n dataStacks.forEach(data => {\n fullArray.set(data, length);\n length += data.length;\n });\n\n this.impl = new THREE.DataTexture2DArray(fullArray, w, h, d);\n this.size = {\n width: w,\n height: h,\n depth: d\n };\n this.isLoading = false;\n }\n }\n\n /**\n * Get and create the material containing shaders and the textures.\n * The texture must be read and ready before calling this function.\n * \n *\n * @param {Object} options - Customise the material with the options object.\n * @param {String} options.fs - string of the fragment shader used for \n * visualisation.\n * @param {String} options.vs - string of the vertex shader used for \n * visualisation.\n * @param {Object} options.uniforms - Containing the data to be passed into the shaders.\n * @param {String} options.glslVersion - Version of glsl used for compile this shader.\n * \n */\n this.getMaterial = function (options) {\n if (this.impl) {\n let material = undefined;\n if (options) {\n if (options.vs && options.fs) {\n let transparent = true;\n if (options.transparent)\n transparent = options.transparent;\n let side = THREE.FrontSide;\n if (options.side)\n side = options.side;\n material = new THREE.ShaderMaterial({\n transparent,\n uniforms: options.uniforms,\n vertexShader: options.vs,\n fragmentShader: options.fs,\n side\n });\n if (options.glslVersion) {\n material.glslVersion = options.glslVersion;\n }\n }\n } else {\n material = new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n if (material) {\n material.needsUpdate = true;\n return material;\n }\n }\n }\n}\n\nTextureArray.prototype = Object.create((require('./texture').Texture).prototype);\nexports.TextureArray = TextureArray;\n","const THREE = require('three');\n\n/**\n * Base texture object for importing images and turning them into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {Texture}\n */\nconst Texture = function () {\n this.isTexture = true;\n this.impl = undefined;\n this.isLoading = false;\n this.size = {\n width: 1,\n height: 1,\n depth: 0\n };\n}\n\n/**\n * Read an image from src.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * \n * @return {Promise} img on resolve.\n */\nTexture.prototype.loadImage = function (img, src) {\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = src;\n })\n}\n\n/**\n @typedef IMAGE_UINT8_RETURN\n @type {Set}\n @property {Uint8Array} array - Array containing the uint8 image value.\n @property {Number} width - Phyiscal image width.\n @property {Number} height - Phyiscal image height.\n */\n/**\n * Read an image from src and turn it into Uint8Array.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * @param {Canvas} canvas - Canvas html element used for the conversion.\n * \n * @return {IMAGE_UNIT8_RETURN}\n */\nTexture.prototype.imageToUint8Array = async function (img, src, canvas) {\n await this.loadImage(img, src);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n return {\n array: new Uint8Array(ctx.getImageData(0, 0, canvas.width, canvas.height).data.buffer),\n width: canvas.width,\n height: canvas.height\n };\n}\n\nTexture.prototype.loadFromImages = async function (srcArrays) {\n return\n}\n\n/**\n * Return true if the texture is ready for consumption.\n * \n * @return {Boolean}\n */\nTexture.prototype.isReady = function () {\n if (this.impl && !this.isLoading)\n return true;\n return false;\n}\n\n/**\n * Return true if the texture is ready for consumption, otherwise false.\n * \n * @return {Boolean}\n */\nTexture.prototype.getMaterial = function () {\n if (this.impl) {\n return new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n}\n\nexports.Texture = Texture;\n","const THREE = require('three');\nconst shader = require(\"../shaders/textureSlide.js\");\n/**\n * Provides a class which create a texture stacks in a block\n * with shaders allowing slices of texture to be displayed.\n * \n * @param {TextureArray} textureIn - An object of texture array\n * holding texture information.\n * \n * @class\n * @author Alan Wu\n * @return {TextureSlides}\n */\nconst TextureSlides = function (textureIn) {\n (require('./texturePrimitive').TexturePrimitive).call(this, textureIn);\n this.isTextureSlides = true;\n const textureSettings = [];\n const idTextureMap = {};\n this.morph = new THREE.Group();\n this.morph.userData = this;\n const alpha = 1.0;\n\n /**\n @typedef SLIDE_SETTINGS\n @type {Set}\n @property {String} direction - the value must be x, y or z, specify the\n direction the slide should be facing.\n @property {Number} value - Normalised value of the location on direction.\n @property {String} id - ID of the mesh, it is only available if the settings\n is returned from {@link TextureSlides.createSlide} or \n {@link TextureSlides.getTextureSettings}.\n */\n /**\n * Create the slides required for visualisation based on the slide settings.\n * The slides themselves are {THREE.PlanGeometry} objects.\n * \n * @param {SLIDE_SETTINGS} slideSettings - An array to each slide settings.\n */\n this.createSlides = slideSettings => {\n slideSettings.forEach(slide => this.createSlide(slide));\n }\n\n /**\n * Set the value of the uniforms for a specific mesh in this\n * texture slide object.\n *\n * @param {THREE.Mesh} mesh - Mesh to be modified\n * @param {SLIDE_SETTINGS} slideSettings - Slide settings.\n */\n setUniformSlideSettingsOfMesh = (mesh, settings) => {\n const material = mesh.material;\n const uniforms = material.uniforms;\n switch (settings.direction) {\n case \"x\":\n uniforms.direction.value = 1;\n uniforms.slide.value.set(settings.value, 0, 0);\n break;\n case \"y\":\n uniforms.direction.value = 2;\n uniforms.slide.value.set(0, settings.value, 0);\n break;\n case \"z\":\n uniforms.direction.value = 3;\n uniforms.slide.value.set(0, 0, settings.value);\n break;\n default:\n break;\n }\n material.needsUpdate = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Modify the mesh based on a setting\n *\n * @param {SLIDE_SETTINGS} settings - s.\n */\n this.modifySlideSettings = (settings) => {\n if (settings && settings.id &&\n settings.id in idTextureMap &&\n idTextureMap[settings.id]) {\n setUniformSlideSettingsOfMesh(idTextureMap[settings.id], settings);\n }\n }\n\n /**\n * Create a slide required for visualisation based on the slide settings.\n * The slide itself is an {THREE.PlanGeometry} object.\n *\n * @param {SLIDE_SETTINGS} settings -settings of the slide to be created.\n * @return {SLIDE_SETTINGS} - Returned settings, it includes the newly\n * created mesh's id.\n */\n this.createSlide = settings => {\n if (this.texture && this.texture.isTextureArray && this.texture.isReady()) {\n if (settings && settings.direction && settings.value !== undefined) {\n const geometry = new THREE.PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n const uniforms = shader.getUniforms();\n uniforms.diffuse.value = this.texture.impl;\n uniforms.depth.value = this.texture.size.depth;\n const options = {\n fs: shader.fs,\n vs: shader.vs,\n uniforms: uniforms,\n glslVersion: shader.glslVersion,\n side: THREE.DoubleSide,\n transparent: false\n };\n const material = this.texture.getMaterial(options);\n material.needsUpdate = true;\n const mesh = new THREE.Mesh(geometry, material);\n const slideSettings = {\n value: settings.value,\n direction: settings.direction,\n id: mesh.id,\n };\n textureSettings.push(slideSettings);\n setUniformSlideSettingsOfMesh(mesh, slideSettings);\n idTextureMap[mesh.id] = mesh;\n this.morph.add(mesh);\n return slideSettings;\n }\n }\n }\n\n /**\n * Return a copy of texture settings used by this object.\n *\n * @return {SLIDE_SETTINGS} - Returned the list of settings..\n */\n this.getTextureSettings = () => {\n return [...textureSettings];\n }\n\n /**\n * Get the array of slides, return them in an array\n *\n * @return {Array} - Return an array of {@link THREE.Object)\n */\n this.getSlides = () => {\n if (this.morph) return [...this.morph.children];\n return [];\n }\n\n /**\n * Remove a slide, this will dispose the slide and its material.\n *\n * @param {Slide} slide - Slide to be remvoed\n */\n this.removeSlide = slide => {\n if (slide) {\n this.removeSlideWithId(slide.id);\n }\n }\n\n /**\n * Remove a slide, this will dispose the slide and its material.\n *\n * @param {Number} id - id of slide to be remvoed\n */\n this.removeSlideWithId = id => {\n if (this.morph && id in idTextureMap && idTextureMap[id]) {\n if (this.morph.getObjectById(id)) {\n const slide = idTextureMap[id];\n this.morph.remove(slide);\n slide.clear();\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n this.boundingBoxUpdateRequired = true;\n }\n const index = textureSettings.findIndex(item => item.id === id);\n if (index > -1) {\n textureSettings.splice(index);\n }\n }\n }\n\n /**\n * Clean up all internal objects.\n */\n this.dispose = () => {\n this.morph.children.forEach(slide => {\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n });\n (require('./texturePrimitive').TexturePrimitive).prototype.dispose.call(this);\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Get the bounding box of this slides.\n * It uses the max and min of the slides position and the\n * transformation to calculate the position of the box.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = function () {\n if (this.morph && this.morph.children && this.morph.visible &&\n this.boundingBoxUpdateRequired) {\n this.cachedBoundingBox.makeEmpty();\n this.morph.children.forEach(slide => {\n const value = slide.material.uniforms.slide.value;\n this.cachedBoundingBox.expandByPoint(value);\n });\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n}\n\nTextureSlides.prototype = Object.create((require('./texturePrimitive').TexturePrimitive).prototype);\nexports.TextureSlides = TextureSlides;\n","const THREE = require('three');\n\nconst glslVersion = THREE.GLSL3;\n\nconst fs =\n`\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray diffuse;\nin vec3 vUw;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 color = texture( diffuse, vUw );\n\n // lighten a bit\n outColor = vec4( color.rgb + .2, 1.0 );\n\n}\n`;\n\nconst vs = \n`\nout vec3 vUw;\nuniform float depth;\nuniform vec3 slide;\nuniform int direction;\n\nvoid main() {\n\n vec3 slidePos = position.xyz;\n\n if (direction == 1)\n slidePos = vec3(slide.x, position.x, position.y);\n if (direction == 2)\n slidePos = vec3(position.x, slide.y, position.y);\n if (direction == 3)\n slidePos = vec3(position.x, position.y, slide.z);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( slidePos, 1.0 );\n\n vUw.xyz = vec3(slidePos.x, slidePos.y, slidePos.z * depth);\n\n}\n`;\n\nconst getUniforms = function() {\n return {\n diffuse: { value: undefined },\n depth: { value: 1 },\n slide: { value: new THREE.Vector3( 0, 0, 1 ) },\n direction: {value: 1},\n };\n}\n\nexports.fs = fs;\nexports.vs = vs;\nexports.glslVersion = glslVersion;\nexports.getUniforms = getUniforms;\n","const THREE = require('three');\n\n/**\n * Provides a base class object which stores textures and rendering object.\n * \n * @class\n * @author Alan Wu\n * @return {TexturePrimitive}\n */\nconst TexturePrimitive = function (textureIn) {\n (require('./zincObject').ZincObject).call(this);\n this.isTexturePrimitive = true;\n this.texture = textureIn;\n}\n\nTexturePrimitive.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.TexturePrimitive = TexturePrimitive;\n","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet localRect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\tlocalRect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\tlocalRect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (localRect) {\r\n\t\t\t\tcurrentOffset[0] = localRect.left;\r\n\t\t\t\tcurrentOffset[1] = localRect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n this.isWebGL2 = () => {\r\n if (renderer)\r\n return renderer.capabilities.isWebGL2;\r\n return false;\r\n }\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst SceneLoader = require('./sceneLoader').SceneLoader;\nconst SceneExporter = require('./sceneExporter').SceneExporter;\nconst Viewport = require('./controls').Viewport;\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"sc\" + uniqueiId++;\n}\n\nconst defaultMetadata = function() {\n return { \n Duration: \"6 secs\",\n OriginalDuration: \"-\",\n TimeStamps: {}\n }\n};\n\nconst defaultDuration = 6000;\n\n/**\n * A Scene contains {@link Region},and \n * {@link CameraControls} which controls the viewport and additional features.\n * It is the main object used for controlling what is and what is not displayed\n * on the renderer.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {Scene}\n */\nexports.Scene = function (containerIn, rendererIn) {\n const container = containerIn;\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n const scene = new THREE.Scene();\n const rootRegion = new (require('./region').Region)();\n scene.add(rootRegion.getGroup());\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-left\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n let pickableObjectsList = [];\n this.forcePickableObjectsUpdate = false;\n this.uuid = getUniqueId();\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n \n\n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n this.camera.aspect = getDrawingWidth() / getDrawingHeight();\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\n zincCameraControls.onResize();\n }\n\n /**\n * Reset the viewport of this scene to its original state. \n */\n this.resetView = () => {\n this.onWindowResize();\n zincCameraControls.resetView();\n }\n\n /**\n * Set the zoom level by unit scroll rate\n */\n this.changeZoomByScrollRateUnit = unit => {\n zincCameraControls.changeZoomByScrollRateUnit(unit);\n }\n\n //Setup the camera for this scene, it also initialise the lighting\n const setupCamera = () => {\n this.camera = new THREE.PerspectiveCamera(40, getDrawingWidth() / getDrawingHeight(), 0.0, 10.0);\n this.ambient = new THREE.AmbientLight(0xffffff, 0.2);\n scene.add(this.ambient);\n\n this.directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);\n scene.add(this.directionalLight);\n zincCameraControls = new (require('./controls').CameraControls)(this.camera, rendererIn.domElement, rendererIn, this);\n\n zincCameraControls.setDirectionalLight(this.directionalLight);\n zincCameraControls.resetView();\n\n minimap = new (require('./minimap').Minimap)(this);\n };\n\n setupCamera();\n\n /**\n * Load the viewport Data from the argument {@link Zinc.Viewport} and set it as \n * the default viewport of this scene.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.loadView = settings => {\n const viewPort = new Viewport();\n viewPort.setFromObject(settings);\n zincCameraControls.setCurrentCameraSettings(viewPort);\n return true;\n }\n\n /**\n * Set up multiple views.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.setupMultipleViews = (defaultView, entries) => {\n for (const [name, settings] of Object.entries(entries)) {\n const viewport = new Viewport();\n viewport.setFromObject(settings);\n zincCameraControls.addViewport(name, viewport);\n }\n zincCameraControls.setDefaultViewport(defaultView);\n }\n\n /**\n * Get the bounding box of all the object in this scene only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = () => {\n return rootRegion.getBoundingBox(true);\n }\n\n /**\n * Adjust the viewport to display the desired volume provided by the bounding box.\n * \n * @param {THREE.Box3} boundingBox - The bounding box which describes the volume of\n * which we the viewport should be displaying.\n */\n this.viewAllWithBoundingBox = boundingBox => {\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const radius = boundingBox.min.distanceTo(boundingBox.max) / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = zincCameraControls.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n\n zincCameraControls.setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Adjust zoom distance to include all primitives in scene only.\n */\n this.viewAll = () => {\n const boundingBox = this.getBoundingBox();\n this.viewAllWithBoundingBox(boundingBox);\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = callbackFunction => {\n rootRegion.forEachGeometry(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = callbackFunction => {\n rootRegion.forEachGlyphset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = callbackFunction => {\n rootRegion.forEachPointset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = callbackFunction => {\n rootRegion.forEachLine(callbackFunction, true);\n }\n\n /** \n * Find and return all geometries in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = GroupName => {\n return rootRegion.findGeometriesWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all pointsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = GroupName => {\n return rootRegion.findPointsetsWithGroupName(GroupName, true);\n }\n /** \n * Find and return all glyphsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = GroupName => {\n return rootRegion.findGlyphsetsWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all lines in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = GroupName => {\n return rootRegion.findLinesWithGroupName(GroupName, true);\n }\n\n /** \n * Find a list of objects with the specified name, this will\n * tranverse through the region tree to find all child objects\n * with matching name.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = GroupName => {\n return rootRegion.findObjectsWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n return rootRegion.findObjectsWithAnatomicalId(anatomicalId, true);\n }\n\n /** \n * Get the bounding box of all zinc objects in list.\n * \n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Box3}\n */\n this.getBoundingBoxOfZincObjects = objectsArray => {\n let boundingBox = undefined;\n for (let i = 0; i < objectsArray.length; i++) {\n let box = objectsArray[i].getBoundingBox();\n if (box) {\n if (!boundingBox)\n boundingBox = box;\n else\n boundingBox.union(box);\n }\n }\n return boundingBox;\n }\n\n /** \n * Convert the vector3 into screen coordinates.\n * \n * @param {THREE.Vector3} point - Vector 3 containing the point to convert,\n * this vector will be overwritten with the returned value.\n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Vector3}\n */\n this.vectorToScreenXY = point => {\n point.project(this.camera);\n let width = getDrawingWidth();\n let height = getDrawingHeight();\n let widthHalf = (width / 2);\n let heightHalf = (height / 2);\n point.x = (point.x * widthHalf) + widthHalf;\n point.y = - (point.y * heightHalf) + heightHalf;\n return point;\n }\n\n /** \n * Get the screen coordinate of the centroid of provided list of objects.\n * \n * @param {Array} zincObjects - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getObjectsScreenXY = zincObjects => {\n if (zincObjects && zincObjects.length > 0) {\n let boundingBox = this.getBoundingBoxOfZincObjects(zincObjects);\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n return this.vectorToScreenXY(center);\n }\n return undefined;\n }\n\n /** \n * Get the screen coordinate of the centroid of all objects \n * in scene with the provided name.\n * \n * @param {String} name - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getNamedObjectsScreenXY = name => {\n let zincObjects = this.findObjectsWithGroupName(name);\n return this.getObjectsScreenXY(zincObjects);\n };\n\n /** \n * Add zinc object into the root {@link Region} of sfcene.\n * \n * @param {ZincObject} - zinc object ot be added.\n * @returns {THREE.Vector3}\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n rootRegion.addZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback) => {\n sceneLoader.loadGlyphsetURL(rootRegion, metaurl, glyphurl, groupName, finishCallback);\n }\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadPointsetURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadLinesURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (url, groupName, finishCallback) => {\n sceneLoader.loadSTL(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (url, groupName, finishCallback) => {\n sceneLoader.loadOBJ(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (url, finishCallback, allCompletedCallback) => {\n sceneLoader.loadMetadataURL(rootRegion, url, finishCallback, allCompletedCallback);\n }\n\n /**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n sceneLoader.loadModelsURL(rootRegion. urls, colours, opacities, timeEnabled, morphColour, finishCallback);\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = url => {\n sceneLoader.loadViewURL(url);\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\n sceneLoader.loadFromViewURL(jsonFilePrefix, finishCallback);\n }\n\n /**\n * Load GLTF into this scene object.\n */\n this.loadGLTF = (url, finishCallback, options) => {\n sceneLoader.loadGLTF(rootRegion, url, finishCallback, options);\n }\n\n //Update the directional light for this scene.\n this.updateDirectionalLight = () => {\n zincCameraControls.updateDirectionalLight();\n }\n\n /**\n * Add any {THREE.Object} into this scene.\n * @param {THREE.Object} object - to be addded into this scene.\n */\n this.addObject = object => {\n scene.add(object);\n }\n\n /**\n * Remove any {THREE.Object} from this scene.\n * @param {THREE.Object} object - to be removed from this scene.\n */\n this.removeObject = object => {\n scene.remove(object);\n }\n\n /**\n * Get the current time of the scene.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (videoHandler != undefined) {\n return videoHandler.getCurrentTime(duration);\n }\n const time = rootRegion.getCurrentTime();\n if (time !== -1) \n return time;\n \n return 0;\n }\n\n /**\n * Set the current time of all the geometries and glyphsets of this scene.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphsTime = (time) => {\n if (videoHandler != undefined) {\n videoHandler.setMorphTime(time, duration);\n }\n rootRegion.setMorphTime(time, true);\n }\n\n /**\n * Check if any object in this scene is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\n }\n return rootRegion.isTimeVarying();\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation) => {\n // Let video dictates the progress if one is present\n let options = {};\n options.camera = zincCameraControls;\n options.displayMarkers = this.displayMarkers;\n options.markerDepths = [];\n\t if (videoHandler) {\n\t\t if (videoHandler.isReadyToPlay()) {\n\t\t\t if (playAnimation) {\n videoHandler.video.play();\n\t\t\t } else {\n\t\t\t\t videoHandler.video.pause();\n\t\t\t }\n const currentTime = videoHandler.video.currentTime /\n videoHandler.getVideoDuration() * duration;\n\t\t\t if (0 == sceneLoader.toBeDownloaded) {\n\t\t\t\t zincCameraControls.setTime(currentTime);\n\t\t\t\t zincCameraControls.update(0);\n rootRegion.setMorphTime(currentTime, true);\n rootRegion.renderGeometries(0, 0, playAnimation, undefined, true);\n\t\t\t } else {\n\t\t\t\t zincCameraControls.update(0);\n\t\t\t }\n\t\t\t //console.log(videoHandler.video.currentTime / videoHandler.getVideoDuration() * 6000);\n\t\t } else {\n\t\t\t myPlayRate = 0;\n\t\t }\n\t } else {\n\t\t if (0 == sceneLoader.toBeDownloaded) {\n zincCameraControls.update(delta);\n rootRegion.renderGeometries(playRate, delta, playAnimation, options, true);\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n this.setVideoHandler = (videoHandlerIn) => {\n if (!videoHandler)\n videoHandler = videoHandlerIn;\n }\n\n /**\n * Set a group of scenes into this parent scene. This group of\n * scenes will also be rendered when this scene is rendered.\n * @private\n */\n this.setAdditionalScenesGroup = scenesGroup => {\n scene.add(scenesGroup);\n }\n\n let getWindowsPosition = (align, x_offset, y_offset, width, height,\n renderer_width, renderer_height) => {\n let x = 0;\n let y = 0;\n if (align.includes(\"top\")) {\n y = renderer_height - height - y_offset;\n } else if (align.includes(\"bottom\")) {\n y = y_offset;\n } else {\n y = Math.floor((renderer_height - height) / 2.0);\n }\n if (align.includes(\"left\")) {\n x = x_offset;\n } else if (align.includes(\"right\")) {\n x = renderer_width - x_offset- width;\n } else {\n x = Math.floor((renderer_width - width) / 2.0);\n }\n return {x: x, y: y};\n }\n\n const renderMinimap = renderer => {\n if (this.displayMinimap === true) {\n renderer.setScissorTest(true);\n renderer.getSize(_markerTarget);\n if (this.minimapScissor.updateRequired) {\n scissor = getWindowsPosition(this.minimapScissor.align,\n this.minimapScissor.x_offset, \n this.minimapScissor.y_offset, \n this.minimapScissor.width,\n this.minimapScissor.height,\n _markerTarget.x, _markerTarget.y);\n this.minimapScissor.updateRequired = false;\n }\n renderer.setScissor(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height);\n renderer.setViewport(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height); \n minimap.updateCamera();\n scene.add(minimap.mask);\n renderer.render(scene, minimap.camera);\n scene.remove(minimap.mask);\n renderer.setScissorTest(false);\n renderer.setViewport(0, 0, _markerTarget.x, _markerTarget.y);\n }\n }\n\n /**\n * Render the scene.\n * @private\n */\n this.render = renderer => {\n if (this.autoClearFlag)\n renderer.clear();\n if (stereoEffectFlag && stereoEffect) {\n stereoEffect.render(scene, this.camera);\n } else {\n renderer.render(scene, this.camera);\n renderMinimap(renderer);\n }\n }\n\n /**\n * Enable or disable interactive control, this is on by default.\n * \n * @param {Boolean} flag - Indicate either interactive control \n * should be enabled or disabled.\n */\n this.setInteractiveControlEnable = flag => {\n if (flag == true)\n zincCameraControls.enable();\n else\n zincCameraControls.disable();\n }\n\n /**\n * Get the camera control of this scene.\n * @return {Zinc.CameraControls}\n */\n this.getZincCameraControls = () => {\n return zincCameraControls;\n }\n\n /**\n * Get the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n /**\n * Set the default duration value for geometries and glyphsets\n * that are to be loaded into this scene.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n rootRegion.setDuration(durationIn);\n duration = durationIn;\n zincCameraControls.setPathDuration(durationIn);\n sceneLoader.duration = durationIn;\n }\n\n /**\n * Get the default duration value.\n * @return {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Enable or disable stereo effect of this scene.\n * @param {Boolean} stereoFlag - Indicate either stereo effect control \n * should be enabled or disabled.\n */\n this.setStereoEffectEnable = stereoFlag => {\n if (stereoFlag == true) {\n if (!stereoEffect) {\n stereoEffect = new require('./controls').StereoEffect(rendererIn);\n }\n }\n rendererIn.setSize(getDrawingWidth(), getDrawingHeight());\n this.camera.updateProjectionMatrix();\n stereoEffectFlag = stereoFlag;\n }\n\n\n /**\n * Check rather object is in scene.\n * \n * @return {Boolean}\n */\n this.objectIsInScene = zincObject => {\n return rootRegion.objectIsInRegion(zincObject, true);\n }\n\n /**\n * Transition the camera view to view the entirety of the \n * bounding box with a smooth transition within the providied\n * transitionTime.\n * \n * @param {THREE.Box3} boundingBox - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.alignBoundingBoxToCameraView = (boundingBox, transitionTime) => {\n if (boundingBox) {\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n const viewport = this.getZincCameraControls().getCurrentViewport();\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const upVector = new THREE.Vector3(viewport.upVector[0],\n viewport.upVector[1], viewport.upVector[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(target, eyePosition).normalize();\n newVec2.subVectors(target, center).normalize();\n const newVec3 = new THREE.Vector3();\n newVec3.crossVectors(newVec1, newVec2);\n const angle = newVec1.angleTo(newVec2);\n if (transitionTime > 0) {\n this.getZincCameraControls().rotateCameraTransition(newVec3,\n angle, transitionTime);\n this.getZincCameraControls().enableCameraTransition();\n } else {\n this.getZincCameraControls().rotateAboutLookAtpoint(newVec3, angle);\n }\n }\n }\n\n /**\n * Transition the camera into viewing the zinc object with a \n * smooth transition within the providied transitionTime.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.alignObjectToCameraView = (zincObject, transitionTime) => {\n if (this.objectIsInScene(zincObject)) {\n const boundingBox = zincObject.getBoundingBox();\n this.alignBoundingBoxToCameraView(boundingBox, transitionTime);\n }\n }\n\n /**\n * Set the camera to point to the centroid of the zinc object.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n */\n this.setCameraTargetToObject = zincObject => {\n if (this.objectIsInScene(zincObject)) {\n const center = new THREE.Vector3();\n const boundingBox = zincObject.getBoundingBox();\n const viewport = this.getZincCameraControls().getCurrentViewport();\n boundingBox.getCenter(center);\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(eyePosition, target);\n newVec2.addVectors(center, newVec1);\n viewport.eyePosition[0] = newVec2.x;\n viewport.eyePosition[1] = newVec2.y;\n viewport.eyePosition[2] = newVec2.z;\n viewport.targetPosition[0] = center.x;\n viewport.targetPosition[1] = center.y;\n viewport.targetPosition[2] = center.z;\n this.getZincCameraControls().setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Check if stereo effect is enabled.\n * @returns {Boolean}\n */\n this.isStereoEffectEnable = () => {\n return stereoEffectFlag;\n }\n\n /**\n * Remove a ZincObject from this scene if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this scene.\n */\n this.removeZincObject = zincObject => {\n rootRegion.removeZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * Update pickable objects list\n */\n this.updatePickableThreeJSObjects = () => {\n pickableObjectsList.splice(0, pickableObjectsList.length);\n rootRegion.getPickableThreeJSObjects(pickableObjectsList, true);\n this.forcePickableObjectsUpdate = false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n //The list will only be updated if changes have been made\n //in region or a flag has been raise\n if (this.forcePickableObjectsUpdate || \n rootRegion.checkPickableUpdateRequred(true)) {\n this.updatePickableThreeJSObjects();\n }\n return pickableObjectsList;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n this.isWebGL2 = () => {\n return rendererIn.isWebGL2();\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n rootRegion.clear(true);\n sceneLoader.toBeDwonloaded = 0;\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * All time stamp to the metadata TimeStamps field.\n */\n this.addMetadataTimeStamp = (key, time) => {\n metadata[\"TimeStamps\"][key] = convertDurationObjectTomSec(time);\n }\n \n /**\n * Get a specific metadata field.\n */\n this.getMetadataTag = key => {\n return metadata[key];\n }\n\n /**\n * Get all metadata set for the scene.\n */\n this.getMetadata = () => {\n return metadata;\n }\n\n /**\n * Set a specific metadata field.\n */\n this.setMetadataTag = (key, value) => {\n metadata[key] = value;\n }\n\n /**\n * Remove a specific metadata field.\n */\n this.removeMetadataTag = key => {\n delete metadata[key];\n }\n\n /**\n * Reset all metadata fields to original value.\n */\n this.resetMetadata = () => {\n metadata = defaultMetadata();\n }\n\n /**\n * Reset duration of scene to default value.\n */\n this.resetDuration = () => {\n this.setDuration(defaultDuration);\n }\n\n // Turn the object into a readable string {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectToString = duration => {\n return [\n ...(duration.years ? [`${duration.years}years`] : []),\n ...(duration.months ? [`${duration.months}months`] : []),\n ...(duration.weeks ? [`${duration.weeks}weeks`] : []),\n ...(duration.days ? [`${duration.days}days`] : []),\n ...(duration.hours ? [`${duration.hours}hours`] : []),\n ...(duration.mins ? [`${duration.mins}mins`] : []),\n ...(duration.secs ? [`${duration.secs}secs`] : []),\n ].join(' ');\n }\n\n // Turn the object into a number representing milliesecond {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectTomSec = duration => {\n return duration.years ? duration.years * 31536000000 : 0 +\n duration.months ? duration.months * 2592000000 : 0 +\n duration.weeks ? duration.weeks * 604800000 : 0 +\n duration.days ? duration.days * 86400000 : 0 +\n duration.hours ? duration.hours * 3600000 : 0 +\n duration.mins ? duration.mins * 60000 : 0 +\n duration.secs ? duration.secs * 1000 : 0;\n }\n\n // Set the readable duration and timer using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n const millisec = convertDurationObjectTomSec(duration);\n this.setMetadataTag(\"Duration\", string);\n this.setDuration(millisec);\n }\n\n // Set the readable original duration using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setOriginalDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n this.setMetadataTag(\"OriginalDuration\", string);\n }\n\n /**\n * Export the scene in GLTF format, it can either return it in\n * string or binary form.\n * \n * @param {Boolean} binary - Indicate it should be exported as binary or\n * text.\n * \n * @return {Promise} The exported data if the promise resolve successfully\n */\n this.exportGLTF = (binary) => {\n const exporter = new SceneExporter(this);\n return exporter.exportGLTF(binary);\n }\n\n /**\n * Get the root region of the scene.\n * \n * @return {Region} Return the root region of the scene\n */\n this.getRootRegion = () => {\n return rootRegion;\n }\n}\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst STLLoader = require('./loaders/STLLoader').STLLoader;\nconst OBJLoader = require('./loaders/OBJLoader').OBJLoader;\nconst PrimitivesLoader = require('./loaders/primitivesLoader').PrimitivesLoader;\n\nconst createNewURL = (target, reference) => {\n let newURL = (new URL(target, reference)).href;\n //Make sure the target url does not contain parameters\n if (target && target.split(\"?\").length < 2) {\n const paramsStrings = reference.split(\"?\");\n //There are parameters, add them to the target\n if (paramsStrings.length === 2) {\n newURL = newURL + \"?\" + paramsStrings[1];\n }\n }\n return newURL;\n}\n\n/**\n * A helper class to help with reading / importing primitives and\n * settings into a {@link Scene}.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {SceneLoader}\n */\nexports.SceneLoader = function (sceneIn) {\n const scene = sceneIn;\n this.toBeDownloaded = 0;\n this.progressMap = [];\n let viewLoaded = false;\n let errorDownload = false;\n const primitivesLoader = new PrimitivesLoader();\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = finishCallback => {\n return xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n if (finishCallback) {\n finishCallback();\n }\n }\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.setupMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = createNewURL(value, referenceURL);\n promises.push(new Promise((resolve, reject) => {\n // Add parameters if we are sent them\n fetch(newURL)\n .then(response => response.json())\n .then(data => resolve({key: key, data: data}))\n .catch(data => reject(data));\n }));\n }\n }\n Promise.all(promises)\n .then(values => {\n const entries = {};\n values.forEach(entry => {\n entries[entry.key] = entry.data;\n });\n scene.setupMultipleViews(defaultView, entries);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.setCurrentViewport(defaultView);\n viewLoaded = true;\n });\n }\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = (url, finishCallback) => {\n this.toBeDownloaded += 1;\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4) {\n if(xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.setupMultipleViews(\"default\", { \"default\" : viewData });\n scene.resetView();\n viewLoaded = true;\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n } else {\n this.onError();\n }\n }\n }\n requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (region, urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n primitivesLoader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError(finishCallback));\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.SceneLoader.#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (targetRegion, jsonFilePrefix, finishCallback) => {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.loadView(viewData);\n const urls = [];\n const filename_prefix = jsonFilePrefix + \"_\";\n for (let i = 0; i < viewData.numberOfResources; i++) {\n const filename = filename_prefix + (i + 1) + \".json\";\n urls.push(filename);\n }\n this.loadModelsURL(targetRegion, urls, viewData.colour, viewData.opacity, viewData.timeEnabled, viewData.morphColour, finishCallback);\n }\n }\n requestURL = resolveURL(jsonFilePrefix + \"_view.json\");\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n //Internal loader for a regular zinc geometry.\n const linesloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newLines = new (require('./primitives/lines').Lines)();\n let material = undefined;\n if (materials && materials[0]) {\n material = new THREE.LineBasicMaterial({color:materials[0].color.clone()});\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n\n if (newLines) {\n newLines.createLineSegment(geometry, material, options);\n newLines.setName(groupName);\n newLines.anatomicalId = anatomicalId;\n newLines.setRenderOrder = renderOrder;\n region.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n\t let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n if (isInline) {\n var object = primitivesLoader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\n }\n }\n\n const loadGlyphset = (region, glyphsetData, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let displayLabels = (options && options.displayLabels) ? options.displayLabels : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n const newGlyphset = new (require('./primitives/glyphset').Glyphset)();\n newGlyphset.setDuration(scene.getDuration());\n newGlyphset.groupName = groupName;\n let myCallback = () => {\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGlyphset);\n }\n ++this.toBeDownloaded;\n if (isInline) {\n newGlyphset.load(glyphsetData, glyphurl, myCallback, isInline, displayLabels);\n }\n else {\n newGlyphset.load(glyphsetData, resolveURL(glyphurl), myCallback, isInline, displayLabels);\n }\n newGlyphset.anatomicalId = anatomicalId;\n newGlyphset.setRenderOrder(renderOrder);\n region.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (region, xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(region, glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for a regular zinc geometry.\n const pointsetloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 10, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n region.addZincObject(newPointset);\n newPointset.setDuration(scene.getDuration());\n newPointset.setRenderOrder(renderOrder);\n }\n geometry.dispose();\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newPointset);\n };\n }\n\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new STLLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined, finishCallback));\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined,finishCallback));\n }\n\n //Loader for the OBJ format, \n const objloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n finishCallback\n ) => {\n return object => {\n this.toBeDownloaded--;\n object.traverse(child => {\n if (child instanceof THREE.Mesh) {\n const zincGeometry = addMeshToZincGeometry(child, localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n if (zincGeometry.morph)\n zincGeometry.morph.name = groupName;\n zincGeometry.groupName = groupName;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n });\n };\n }\n\n /**\n * Load a geometry into this scene, this is a subsequent called from \n * {@link Zinc.Scene#loadMetadataURL}, although it can be used to read\n * in geometry into the scene externally.\n * \n * @param {String} url - regular json model file providing geometry.\n * @param {Boolean} timeEnabled - Indicate if geometry morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {STRING} fileFormat - name supported formats are STL, OBJ and JSON.\n * @param {Function} finishCallback - Callback function which will be called\n * once the geometry is succssfully loaded in.\n */\n const loadSurfaceURL = (region ,url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n let localTimeEnabled = 0;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let fileFormat = (options && options.fileFormat) ? options.fileFormat : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = primitivesLoader;\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n return;\n }\n }\n if (isInline) {\n const object = primitivesLoader.parse( url );\n\t\t\t(meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n primitivesLoader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincObject => {\n downloadedItem = downloadedItem + 1;\n if (zincObject && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincObject);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(scene);\n }\n if (downloadedItem == numberOfDownloaded) {\n if (viewLoaded === false)\n scene.viewAll();\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n }\n };\n };\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (isInline) {\n const object = primitivesLoader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError(finishCallback));\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (region, metaurl, glyphurl, groupName, finishCallback, options) => {\n const isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadGlyphset(region, metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(region, xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n /**\n * Add a user provided {THREE.Geometry} into the scene as zinc geometry.\n * \n * @param {Three.Geometry} geometry - The threejs geometry to be added as {@link Zinc.Geometry}.\n * @param {THREE.Color} color - Colour to be assigned to this geometry, overrided if materialIn is provided.\n * @param {Number} opacity - Opacity to be set for this geometry, overrided if materialIn is provided.\n * @param {Boolean} localTimeEnabled - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Boolean} localMorphColour - Set this to true if morph colour is present, overrided if materialIn is provided.\n * @param {Boolean} external - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Function} finishCallback - Callback once the geometry has been added succssfully.\n * @param {THREE.Material} materialIn - Material to be set for this geometry if it is present.\n * \n * @returns {Zinc.Geometry}\n */\n addZincGeometry = (\n region,\n geometryIn,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n finishCallback,\n materialIn,\n groupName\n ) => {\n let options = {};\n options.colour = colour;\n options.opacity = opacity;\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour\n const newGeometry = new (require('./primitives/geometry').Geometry)();\n newGeometry.createMesh(geometryIn, materialIn, options);\n if (newGeometry.morph) {\n newGeometry.setName(groupName);\n if (region) region.addZincObject(newGeometry);\n newGeometry.setDuration(scene.getDuration());\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (newGeometry.videoHandler)\n scene.setVideoHandler(newGeometry.videoHandler);\n return newGeometry;\n }\n return undefined;\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n anatomicalId,\n renderOrder,\n finishCallback\n ) => {\n return (geometry, materials) => {\n let material = undefined;\n if (materials && materials[0]) {\n material = materials[0];\n }\n const zincGeometry = addZincGeometry(region, geometry, colour, opacity, \n localTimeEnabled, localMorphColour, undefined, material, groupName, renderOrder);\n zincGeometry.anatomicalId = anatomicalId;\n zincGeometry.setRenderOrder(renderOrder);\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n };\n }\n\n //Turn ISO 8601 duration string into an array.\n const parseDuration = (durationString) => {\n const regex = /P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?)?$/;\n const [, years, months, weeks, days, hours, mins, secs] = \n durationString.match(regex);\n return {years: years,months: months, weeks: weeks, days: days,\n hours: hours, mins: mins, secs: secs };\n }\n\n //Load settings from metadata item.\n this.loadSettings = (item) => {\n if (item) {\n //duration uses the ISO 8601 standard - PnYnMnDTnHnMnS\n if (item.Duration) {\n const duration = parseDuration(item.Duration);\n scene.setDurationFromObject(duration);\n }\n if (item.OriginalDuration) {\n const duration = parseDuration(item.OriginalDuration);\n scene.setOriginalDurationFromObject(duration);\n }\n if (item.TimeStamps) {\n for (const key in item.TimeStamps) {\n const time = parseDuration(item.TimeStamps[key]);\n scene.addMetadataTimeStamp(key, time);\n }\n }\n }\n }\n\n //Function to process each of the graphical metadata item except for view and\n //settings.\n const readPrimitivesItem = (region, referenceURL, item, order, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = createNewURL(item.URL, referenceURL);\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n let groupName = item.GroupName;\n if (groupName === undefined || groupName === \"\") {\n groupName = \"_Unnamed\";\n }\n\n let options = {\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n compression: item.compression,\n renderOrder: order\n };\n \n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = createNewURL(item.GlyphGeometriesURL, referenceURL);\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(region, newURL, newGeometryURL, groupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = createNewURL(item.URL, referenceURL);\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n scene.setupMultipleViews(\"default\", { \"default\" : newURL});\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGLTF = (region, url, finishCallback, options) => {\n const GLTFToZincJSLoader = new (require('./loaders/GLTFToZincJSLoader').GLTFToZincJSLoader)();\n GLTFToZincJSLoader.load(scene, region, url, finishCallback, options);\n }\n\n let loadRegions = (currentRegion, referenceURL, regions, callback) => {\n if (regions.Primitives) {\n regions.Primitives.forEach(primitive => {\n let order = 1;\n if (primitive.Order)\n order = primitive.Order;\n readPrimitivesItem(currentRegion, referenceURL, primitive, order, callback);\n });\n }\n if (regions.Transformation) {\n currentRegion.setTransformation(regions.Transformation);\n }\n if (regions.Children) {\n for (const [regionName, value] of Object.entries(regions.Children)) {\n const childRegion = currentRegion.findOrCreateChildFromPath(regionName);\n if (childRegion) {\n loadRegions(childRegion, referenceURL, value, callback);\n }\n }\n }\n }\n\n let getNumberOfDownloadsInArray = (array, includeViews) => {\n if (Array.isArray(array)) {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i].Type && (\n (includeViews && array[i].Type === \"View\") ||\n array[i].Type === \"Surfaces\" ||\n array[i].Type === \"Glyph\" ||\n array[i].Type === \"Points\" ||\n array[i].Type === \"Lines\"))\n {\n count++;\n }\n }\n return count;\n }\n return 0;\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? \n getNumberOfDownloadsInArray(regionJson.Primitives, false) : 0;\n if (regionJson.Children) {\n Object.values(regionJson.Children).forEach(childRegion => {\n counts += getNumberOfObjectsInRegions(childRegion);\n });\n }\n return counts;\n }\n\n let getNumberOfObjects = (metadata) => {\n if (Array.isArray(metadata)) {\n return getNumberOfDownloadsInArray(metadata, true);\n } else if ((typeof metadata) === \"object\" && metadata !== null) {\n if (metadata.Version === \"2.0\") {\n return getNumberOfObjectsInRegions(metadata.Regions);\n }\n }\n }\n\n let readVersionOneRegionPath = (region, referenceURL, item, order, callback) => {\n let targetRegion = region;\n if (item.RegionPath && item.RegionPath !== \"\") {\n targetRegion = region.findOrCreateChildFromPath(item.RegionPath);\n }\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, item, order * 2, callback);\n }\n\n let loadVersionOne = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (let i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, metadata[i], callback);\n for (let i = 0; i < metadata.length; i++) {\n readVersionOneRegionPath(targetRegion, referenceURL, metadata[i], i, callback);\n }\n }\n\n let loadVersionTwo = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n if (metadata.Settings)\n this.loadSettings(metadata.Settings);\n if (metadata.Views)\n loadMultipleViews(referenceURL, metadata.Views, referenceURL);\n if (metadata.Regions)\n loadRegions(targetRegion, referenceURL, metadata.Regions, callback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (targetRegion, url, finishCallback, allCompletedCallback) => {\n const xmlhttp = new XMLHttpRequest();\n var requestURL = resolveURL(url);\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n scene.resetMetadata();\n scene.resetDuration();\n viewLoaded = false;\n let referenceURL = xmlhttp.responseURL;\n if (referenceURL === undefined)\n referenceURL = (new URL(requestURL)).href;\n const metadata = JSON.parse(xmlhttp.responseText);\n if (Array.isArray(metadata)) {\n loadVersionOne(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.Version == \"2.0\") {\n loadVersionTwo(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n }\n }\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolors[ componentIdx ] = r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 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// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet line = '', lineFirstChar = '';\n\t\tlet lineLength = 0;\n\t\tlet result = [];\n\n\t\t// Faster to just trim left side of the line. Use if available.\n\t\tconst trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tline = lines[ i ];\n\n\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\tlineLength = line.length;\n\n\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( /\\s+/ );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\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// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\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} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( /\\s+/ );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","const JSONLoader = require('./JSONLoader').JSONLoader;\n\nexports.PrimitivesLoader = function () {\n let concurrentDownloads = 0;\n const MAX_DOWNLOAD = 20;\n this.crossOrigin = \"Anonymous\";\n const loader = new JSONLoader();\n const waitingList = [];\n\n this.load = (url, onLoad, onProgress, onError) => {\n if (MAX_DOWNLOAD > concurrentDownloads) {\n ++concurrentDownloads;\n loader.crossOrigin = this.crossOrigin;\n const onLoadCallback = new onFinally(onLoad, this);\n const onErrorCallback = new onFinally(onError, this);\n loader.load(url, onLoadCallback, onProgress, onErrorCallback);\n } else {\n waitingList.push({\n url,\n onLoad,\n onProgress,\n onError\n });\n }\n }\n\n this.loadFromWaitingList = () => {\n const item = waitingList.shift();\n if (item)\n this.load(item.url, item.onLoad, item.onProgress, item.onError);\n }\n\n const onFinally = function(callback, loader) {\n return (...args) => {\n --concurrentDownloads;\n callback(...args);\n loader.loadFromWaitingList();\n }\n }\n\n\n this.parse = data => {\n return loader.parse(data);\n }\n\n}\n","const THREE = require('three');\n\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nconst GLTFToZincJSLoader = function () {\n\n const _this = this;\n\n this.parseGLTFObjects = (object, region, depth, finishCallback) => {\n let childRegion = region;\n if (depth !== 0) {\n if (object.type === \"Object3D\") {\n if (object.name !== \"\") {\n if (region)\n childRegion = region.findOrCreateChildFromPath(object.name);\n if (childRegion) {\n const group = childRegion.getGroup();\n group.position.copy(object.position);\n group.rotation.copy(object.rotation);\n group.quaternion.copy(object.quaternion);\n group.matrixAutoUpdate = true;\n }\n }\n } else {\n let zincGeometry = undefined;\n if (object.type === \"Mesh\") {\n zincGeometry = new (require('../primitives/geometry').Geometry)();\n } else if (object.type === \"LineSegments\") {\n zincGeometry = new (require('../primitives/lines').Lines)();\n } else if (object.type === \"Points\") {\n zincGeometry = new (require('../primitives/pointset').Pointset)();\n }\n if (zincGeometry) {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (object.geometry && object.geometry.morphAttributes) {\n localTimeEnabled = object.geometry.morphAttributes.position ? true : false;\n localMorphColour = object.geometry.morphAttributes.color ? true : false;\n }\n zincGeometry.setMesh(object.clone(), localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n zincGeometry.morph.matrixAutoUpdate = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n }\n }\n depth++;\n object.children.forEach( child => {\n _this.parseGLTFObjects(child, childRegion, depth, finishCallback);\n });\n }\n\n this.setCamera = scene => {\n scene.viewAll();\n const cameraControls = scene.getZincCameraControls();\n const viewport = cameraControls.getCurrentViewport();\n cameraControls.addViewport('default', viewport);\n cameraControls.setDefaultViewport('default');\n }\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.load = (scene, region, url, finishCallback, allCompletedCallback, options) => {\n const path = url.substring(0, url.lastIndexOf(\"/\") + 1);\n const filename = url.substring(url.lastIndexOf(\"/\") + 1, url.length);\n const loader = new GLTFLoader().setPath(path);\n \n loader.load( filename, function ( gltf ) {\n console.log(gltf)\n _this.parseGLTFObjects(gltf.scene, region, 0, finishCallback);\n _this.setCamera(scene);\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n });\n }\n}\n\nexports.GLTFToZincJSLoader = GLTFToZincJSLoader;\n","module.exports = require(\"three/examples/jsm/loaders/GLTFLoader\");","const GLTFExporter = require('./three/GLTFExporter').GLTFExporter;\n\n/**\n * Provides an object which uses for exporting the scene\n * \n * @class\n * @author Alan Wu\n * @return {SceneExporter}\n */\nconst SceneExporter = function (sceneIn) {\n const scene = sceneIn;\n\n\tthis.exportGLTF = (binary) => {\n const rootRegion = scene.getRootRegion();\n const zincObjects = rootRegion.getAllObjects(true);\n const animations = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.animationClip) {\n animations.push({clip: zincObject.animationClip[0], mesh: zincObject.morph});\n }\n });\n const exporter = new GLTFExporter();\n const options = { binary, animations };\n return new Promise((resolve, reject) => {\n exporter.parse( scene.getThreeJSScene(), function ( gltf ) {\n resolve(gltf);\n }, options );\n });\n\t}\n}\n\nexports.SceneExporter = SceneExporter;\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRGBFormat,\n\tRepeatWrapping,\n\tScene,\n\tVector3\n} from 'three';\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsPBRSpecularGlossiness( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tUNSIGNED_BYTE: 0x1401,\n\tUNSIGNED_SHORT: 0x1403,\n\tFLOAT: 0x1406,\n\tUNSIGNED_INT: 0x1405,\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\tif ( window.TextEncoder !== undefined ) {\n\n\t\treturn new TextEncoder().encode( text ).buffer;\n\n\t}\n\n\tconst array = new Uint8Array( new ArrayBuffer( text.length ) );\n\n\tfor ( let i = 0, il = text.length; i < il; i ++ ) {\n\n\t\tconst value = text.charCodeAt( i );\n\n\t\t// Replacing multi-byte character with space(0x20).\n\t\tarray[ i ] = value > 0xFF ? 0x20 : value;\n\n\t}\n\n\treturn array.buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nlet cachedCanvas = null;\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\t\tthis.extensionsUsed = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter'\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\twrite( input, onDone, options ) {\n\n\t\tthis.options = Object.assign( {}, {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\ttruncateDrawRange: true,\n\t\t\tembedImages: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tconst writer = this;\n\n\t\tPromise.all( this.pending ).then( function () {\n\n\t\t\tconst buffers = writer.buffers;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\t\t// Merge buffers.\n\t\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t\t// Declare extensions.\n\t\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\n\t\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\n\t\t\t// Update bytelength of the single buffer.\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\treader.readAsArrayBuffer( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t// Binary chunk.\n\t\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t\t// JSON chunk.\n\t\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t\t// GLB header.\n\t\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\t\theader,\n\t\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\t\tjsonChunk,\n\t\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\t\tbinaryChunk\n\t\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\t\tconst glbReader = new window.FileReader();\n\t\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\t\tonDone( glbReader.result );\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 ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\t\tonDone( json );\n\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n if (object.userData && object.userData.isZincObject) return;\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Assign and return a temporal unique id for an object\n\t * especially which doesn't have .uuid\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( object ) {\n\n\t\tif ( ! this.uids.has( object ) ) this.uids.set( object, this.uid ++ );\n\n\t\treturn this.uids.get( object );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tif ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\tcomponentSize = 1;\n\n\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\tcomponentSize = 2;\n\n\t\t} else {\n\n\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = attribute.itemSize * componentSize;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise<Integer>}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst options = this.options;\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array (float, uint or ushort)\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type.' );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined ) count = attribute.count;\n\n\t\t// @TODO Indexed buffer geometry with drawRange not supported yet\n\t\tif ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {\n\n\t\t\tconst end = start + count;\n\t\t\tconst end2 = geometry.drawRange.count === Infinity\n\t\t\t\t? attribute.count\n\t\t\t\t: geometry.drawRange.start + geometry.drawRange.count;\n\n\t\t\tstart = Math.max( start, geometry.drawRange.start );\n\t\t\tcount = Math.min( end, end2 ) - start;\n\n\t\t\tif ( count < 0 ) count = 0;\n\n\t\t}\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)\n\t * @param {Boolean} flipY before writing out the image\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY ) {\n\n\t\tconst writer = this;\n\t\tconst cache = writer.cache;\n\t\tconst json = writer.json;\n\t\tconst options = writer.options;\n\t\tconst pending = writer.pending;\n\n\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\tconst cachedImages = cache.images.get( image );\n\t\tconst mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';\n\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\tif ( ! json.images ) json.images = [];\n\n\t\tconst imageDef = { mimeType: mimeType };\n\n\t\tif ( options.embedImages ) {\n\n\t\t\tconst canvas = cachedCanvas = cachedCanvas || document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d' );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t} else {\n\n\t\t\t\tif ( format !== RGBAFormat && format !== RGBFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tif ( format === RGBAFormat ) {\n\n\t\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ j + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ j + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ j + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = 255;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push( new Promise( function ( resolve ) {\n\n\t\t\t\t\tcanvas.toBlob( function ( blob ) {\n\n\t\t\t\t\t\twriter.processBufferViewImage( blob ).then( function ( bufferViewIndex ) {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\t\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, mimeType );\n\n\t\t\t\t} ) );\n\n\t\t\t} else {\n\n\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\timageDef.uri = image.src;\n\n\t\t}\n\n\t\tconst index = json.images.push( imageDef ) - 1;\n\t\tcachedImages[ key ] = index;\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tif ( material.metalnessMap === material.roughnessMap ) {\n\n\t\t\t\tconst metalRoughMapDef = { index: this.processTexture( material.metalnessMap ) };\n\t\t\t\tthis.applyTextureTransform( metalRoughMapDef, material.metalnessMap );\n\t\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = { index: this.processTexture( material.map ) };\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\t// note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.\n\t\t\tconst emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 1 ) {\n\n\t\t\t\temissive.multiplyScalar( 1 / maxEmissiveComponent );\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );\n\n\t\t\t}\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = { index: this.processTexture( material.normalMap ) };\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== - 1 ) {\n\n\t\t\t\tif ( material.normalScale.x !== material.normalScale.y ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Normal scale components are different, ignoring Y and exporting X.' );\n\n\t\t\t\t}\n\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: 1\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tif ( geometry.isBufferGeometry !== true ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv2: 'TEXCOORD_1',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.substr( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n \n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' && attributeName !== 'color' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\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\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tlet gltfAttributeName = attributeName.toUpperCase();\n\n if ( nameConversion[ attributeName ] ) {\n\n gltfAttributeName = nameConversion[ attributeName ];\n\n }\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = baseAttribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n if (baseAttribute) {\n \n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n if (baseAttribute.count > j) {\n\n relativeAttribute.setXYZ(\n j,\n attribute.getX( j ) - baseAttribute.getX( j ),\n attribute.getY( j ) - baseAttribute.getY( j ),\n attribute.getZ( j ) - baseAttribute.getZ( j )\n );\n\n }\n\n }\n\n } else {\n\n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n relativeAttribute.setXYZ(\n j,\n 0,\n 0,\n 0\n );\n\n }\n\n }\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array<THREE.Object3D>} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ].clip, options.animations[i].mesh);\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * - 1.0;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n */\nclass GLTFMaterialsPBRSpecularGlossiness {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_pbrSpecularGlossiness';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isGLTFSpecularGlossinessMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorFactor ) {\n\n\t\t\textensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;\n\n\t\t}\n\n\t\tconst specularFactor = [ 1, 1, 1 ];\n\t\tmaterial.specular.toArray( specularFactor, 0 );\n\t\textensionDef.specularFactor = specularFactor;\n\t\textensionDef.glossinessFactor = material.glossiness;\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorTexture ) {\n\n\t\t\textensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tconst specularMapDef = { index: writer.processTexture( material.specularMap ) };\n\t\t\twriter.applyTextureTransform( specularMapDef, material.specularMap );\n\t\t\textensionDef.specularGlossinessTexture = specularMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\n\n/**\n * Object with containg viewport information used in ZincJS.\n * \n * @class\n * @author Alan Wu\n * @return {Viewport}\n */\nconst Viewport = function () {\n /** @property {Number} */\n\tthis.nearPlane = 0.168248;\n /** @property {Number} */\n\tthis.farPlane = 6.82906;\n /**@property {Array} */\n\tthis.eyePosition = [0.5, -2.86496, 0.5];\n /** @property {Array} */\n\tthis.targetPosition = [0.5, 0.5, 0.5];\n /** @property {Array} */\n\tthis.upVector = [ 0.0, 0.0, 1.0];\n\tconst _this = this;\n\n this.setFromObject = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector }) => {\n _this.nearPlane = nearPlane;\n _this.farPlane = farPlane;\n _this.eyePosition = eyePosition;\n _this.targetPosition = targetPosition;\n _this.upVector = upVector;\n }\n};\n\n/**\n * Provides the basic controls for a scene.\n * \n * @class\n * @author Alan Wu\n * @return {CameraControls}\n */\nconst CameraControls = function ( object, domElement, renderer, scene ) {\n\tconst MODE = { NONE: -1, DEFAULT: 0, PATH: 1, SMOOTH_CAMERA_TRANSITION: 2, AUTO_TUMBLE: 3, ROTATE_TRANSITION: 4, MINIMAP: 5, SYNC_CONTROL: 6 };\n /** \n * Actions states.\n * Available states are NONE, ROTATE, ZOOM, PAN, TOUCH_ROTATE, TOUCH_ZOOM, TOUCH_PAN and SCROLL.\n * @property {Object} \n */\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6 };\n const ROTATE_DIRECTION = { NONE: -1, FREE: 1, HORIZONTAL: 2, VERTICAL: 3 };\n /** \n * Available click actions are MAIN, AUXILIARY and SECONARY.\n * @property {Object} \n */\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.scrollRate = 50;\n\tlet duration = 6000;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tlet defaultViewport = \"default\";\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet mouseScroll = 0;\n let rotateMode = ROTATE_DIRECTION.FREE;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n const sceneSphere = new THREE.Sphere();\n const _tempEye = new THREE.Vector3();\n let ndcControl = undefined;\n let maxDist = 0;\n const viewports = {\n \"default\" : new Viewport()\n };\n viewports.default.nearPlane = 0.1;\n\tviewports.default.farPlane = 2000;\n\tviewports.default.eyePosition = [0, 0, 0];\n\tviewports.default.targetPosition = [0, 0, -1.0];\n\tviewports.default.upVector = [ 0.0, 1.0, 0.0];\n\n //Add the target property\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( ...viewports.default.targetPosition );\n\n //Calculate the max distanc allowed, it is the longer\n //of 6 times the radius of the current scene and\n //the current distance between scene centroid and the postion\n //of the camera.\n this.calculateMaxAllowedDistance = (scene) => {\n const box = scene.getBoundingBox();\n if (box) {\n box.getBoundingSphere(sceneSphere);\n maxDist = sceneSphere.radius * 6;\n let currentDist = 0;\n if (this.cameraObject) {\n currentDist = this.cameraObject.position.distanceTo(sceneSphere.center);\n }\n maxDist = currentDist > maxDist ? currentDist : maxDist;\n } else {\n maxDist = 0;\n }\n }\n\n /**\n * Add a viewport to the list of available named viewports.\n * \n * @param {String} name - Name of the viewport\n * @param {Viewport} viewportName - Viewport to be added\n */\n this.addViewport = (viewportName, viewport) => {\n if (viewportName && viewport)\n viewports[viewportName] = viewport;\n }\n\n /**\n * Set the default viewport for this {@link CameraControls}.\n * \n * @param {String} defaultName - Name of the viewport\n * \n * @return {Boolean} true if set successfully, false otherwise.\n */\n this.setDefaultViewport = defaultName => {\n\t\tif (defaultName && (defaultName in viewports)) {\n defaultViewport = defaultName;\n return true;\n }\n return false\n\t}\n\n /**\n * Get the name of the default viewport.\n * \n * \n * @return {String}\n */\n this.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\n /**\n * Get the viewport with the provied name stored in this object.\n * @param {String} name - Name of the viewport\n * \n * @return {Viewport}\n */\n\tthis.getViewportOfName = name => {\n\t\treturn viewports[name];\n\t}\n\n /**\n * Set the viewport with a name if it is found in the list.\n * @param {String} name - Name of the viewport\n * \n * @return {Boolean} if viewport is found and set, otherwise false.\n */\n this.setCurrentViewport = name => {\n if (name in viewports) {\n this.setCurrentCameraSettings(viewports[name])\n return true;\n }\n return false;\n\t}\n\n /**\n * Set the direction of rotation allowed with this control.\n * \n * @param {String} mode - available options are none, horizontal,\n * vertical and free.\n */\n this.setRotationMode = mode => {\n switch (mode) {\n case \"none\":\n rotateMode = ROTATE_DIRECTION.NONE;\n break;\n case \"horizontal\":\n rotateMode = ROTATE_DIRECTION.HORIZONTAL;\n break;\n case \"vertical\":\n rotateMode = ROTATE_DIRECTION.VERTICAL;\n break;\n case \"free\":\n default:\n rotateMode = ROTATE_DIRECTION.FREE;\n }\n }\n\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n if (ndcControl)\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n\t}\n\n /**\n * Get normalised coordinates from windows coordinates.\n * \n * @param {String} x\n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the normalised x and y coordinates.\n */\n this.getNDCFromDocumentCoords = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n const out_x = ((x - rect.left) / rect.width) * 2 - 1;\n const out_y = -((y - rect.top) / rect.height) * 2 + 1;\n return position.set(out_x, out_y);\n }\n\n /**\n * Get the relative windows coordinates from normalised coordiantes.\n * \n * @param {String} x \n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the relative x and y coordinates.\n */\n this.getRelativeCoordsFromNDC = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n position.x = (x + 1) * rect.width / 2.0;\n position.y = (1 - y) * rect.height / 2.0;\n return position;\n }\n\n /**\n * Map a mouse click to the specified action.\n * \n * @param {String} buttonName - please see {@link CLICK_ACTION}\n * @param {String} actionName - please see {@link STATE}\n */\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n\n //Make sure the camera does not travel beyond limit\n const checkTravelDistance = () => {\n if (maxDist > 0) {\n const newDist = _tempEye.distanceTo(sceneSphere.center);\n return (maxDist > newDist || \n this.cameraObject.position.distanceTo(sceneSphere.center) > newDist );\n }\n return true;\n }\n \n const translateViewport = translation => {\n _tempEye.copy(this.cameraObject.position).add(translation);\n if (checkTravelDistance()) {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n }\n\t\n\tconst onDocumentMouseDown = event => {\n updateRect(false);\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n updateRect(false);\n\t\tthis.pointer_x = event.clientX - rect.left;\n\t\tthis.pointer_y = event.clientY - rect.top;\n if (currentMode === MODE.MINIMAP) {\n let minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n if (minimapCoordinates) {\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n } else {\n if ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n zincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n }\n }\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n updateRect(false);\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n const onDocumentEnter = () => {\n\t\tupdateRect(true);\n\t}\n\n const updateRect = forced => {\n //Use intersectionObserver to reset the rect for ray tracing.\n if (forced || rect === undefined) {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n rect = entry.boundingClientRect;\n }\n observer.disconnect();\n });\n \n observer.observe(this.domElement);\n }\n }\n\t\n\tconst onDocumentWheelEvent = event => {\n updateRect(false);\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.scrollRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.scrollRate * -1;\n\t\tmouseScroll = mouseScroll + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n /**\n * Rotate around the axis with the amount specified by angle.\n * \n * @param {THREE.Vector3} axis - The rotational axis.\n * @param {Number} Angle - Specify how much the camera shoudl rotate by.\n */\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n\t\t\tconst height = rect.height;\n\t\t\tif ((0<width)&&(0<height))\n\t\t\t{\n\t\t\t\tconst radius=0.25*(width+height);\n\t\t\t\tlet delta_x = 0;\n\t\t\t\tlet delta_y = 0;\n if (rotateMode === ROTATE_DIRECTION.FREE ||\n rotateMode === ROTATE_DIRECTION.HORIZONTAL)\n\t\t\t\t delta_x=this.pointer_x-this.previous_pointer_x;\n if (rotateMode === ROTATE_DIRECTION.FREE ||\n rotateMode === ROTATE_DIRECTION.VERTICAL)\n\t\t\t\t delta_y=this.previous_pointer_y-this.pointer_y;\n\t\t\t\tconst tangent_dist = Math.sqrt(delta_x*delta_x + delta_y*delta_y);\n\t\t\t\tif (tangent_dist > 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n let d = 0;\n // Do not allow rotation on other direction around the origin if rotateMode is not free\n if (rotateMode === ROTATE_DIRECTION.FREE) {\n let d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n if (d > radius)\t{\n d = radius;\n }\n else {\n if (d < -radius) {\n d = -radius;\n }\n }\n }\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if (this._state === STATE.SCROLL) {\n\t\t\tdelta = mouseScroll;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.scrollRate;\n this.changeZoomByValue(delta_y);\n }\n\n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n const height = rect.height;\n\n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\n\t\t\tconst dy = 1.5 * delta_y/height;\n\t\t\tif ((dist + dy*dist) > 0.01) {\n\t\t\t\ta.normalize()\n _tempEye.copy(this.cameraObject.position);\n\t\t\t\t_tempEye.x += a.x*dy*dist;\n\t\t\t\t_tempEye.y += a.y*dy*dist;\n\t\t\t\t_tempEye.z += a.z*dy*dist;\n if (checkTravelDistance()) {\n this.cameraObject.position.copy(_tempEye);\n this.updateDirectionalLight();\n const near_far_minimum_ratio = 0.00001;\n if ((near_far_minimum_ratio * this.cameraObject.far) <\n (this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n if (this.near_plane_fly_debt != 0.0)\t{\n this.near_plane_fly_debt += dy*dist;\n if (this.near_plane_fly_debt > 0.0) {\n this.cameraObject.near += this.near_plane_fly_debt;\n this.cameraObject.far += this.near_plane_fly_debt;\n this.near_plane_fly_debt = 0.0;\n }\n else {\n this.cameraObject.near += dy*dist;\n this.cameraObject.far += dy*dist;\n }\n }\t\t\t\n }\n else {\n if (this.near_plane_fly_debt == 0.0) {\n const diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.far -= diff;\n this.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n }\n this.near_plane_fly_debt += dy*dist;\n }\n }\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y = calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif (this._state === STATE.SCROLL) {\n\t\t\tmouseScroll = 0;\n this._state = STATE.NONE;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\n /**\n * Force an update to the position of the directional light.\n */\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t/**\n * Enable the camera control.\n */\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n this.domElement.addEventListener( 'mouseenter', onDocumentEnter, false );\n\t }\n\t}\n\n /**\n * Disable the camera control.\n */\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n this.domElement.removeEventListener( 'mouseenter', onDocumentEnter, false );\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n /**\n * This is an experimental feature. It loads a path - point to point which\n * the camera will travel.\n * \n * @param {String} path_url - The path.\n * @param {requestCallback} finishCallback - The callback once the path is load.\n */\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\trequestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\n /**\n * Set the duration for the camera to travel along the path.\n * \n * @param {Number} durationIn - the duration for the path.\n */\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n /**\n * Get the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @return {Number}\n */\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n /**\n * Set the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @param {Number} playRateIn - The play rate speed.\n */\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\n /**\n * Update the internal timer by the set amount, this can\n * be used to force a time update by setting delta to zero.\n * \n * @param {Number} delta - The amount of time to increment\n * the time by.\n */\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n /**\n * Get the current inbuild time,\n * \n * @return {Number}\n */\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n /**\n * Set the current inbuild time,\n * \n * @param {Number} timeIn - this will be used as the current time,\n * it should be between the range of zero and the set duration.\n */\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n /**\n * Get the number of frame which is determine by number of points\n * in the camera path.\n * \n * @return {Number}\n */\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\n /**\n * Get the current time frame and it will return three values in\n * an array.\n * \n * @return {Array} - bottom frame, top frame and the proportion.\n */\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n /**\n * Set the current time frame.\n * \n * @param {Number} targetTimeFrame - bottom frame, top frame and the proportion.\n */\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n /**\n * Update the progress on the path by the specified amount - delta.\n * \n * @param {Number} delta - The amount of time to increment\n */\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n /**\n * Force recalculation of the current path.\n */\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\n // handle synchronised control based on information in the idc\n const handleSyncControl = () => {\n if ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n //rotateion does not trigger callback\n tumble();\n } else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n translate();\n ndcControl.triggerCallback();\n } else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n ndcControl.zoom(calculateZoomDelta());\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y = this.pointer_y;\n if (this._state === STATE.SCROLL) {\n this._state = STATE.NONE;\n }\n mouseScroll = 0;\n ndcControl.triggerCallback();\n }\n }\n\t\n /**\n * Update all controls related changes - including calculation of the viewport.\n * \n * @param {Number} timeChanged - Time eclipse since last called.\n */\n\tthis.update = timeChanged => {\n\t\tconst delta = timeChanged * playRate;\n\t\tlet controlEnabled = enabled;\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdatePath(delta);\n\t\t} else if (currentMode === MODE.SMOOTH_CAMERA_TRANSITION && smoothCameraTransitionObject) {\n\t\t\tsmoothCameraTransitionObject.update(delta);\n\t\t\tif (smoothCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\tsmoothCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.ROTATE_CAMERA_TRANSITION && rotateCameraTransitionObject) {\n\t\t\trotateCameraTransitionObject.update(delta);\n\t\t\tif (rotateCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\trotateCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject) {\n\t\t\tcameraAutoTumbleObject.update(delta);\n\t\t} else if (currentMode === MODE.SYNC_CONTROL && ndcControl) {\n handleSyncControl();\n controlEnabled = false;\n }\n\t\tif (controlEnabled) {\n\t\t\tif ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n\t\t\t\ttumble();\n\t\t\t} else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n\t\t\t\ttranslate();\n\t\t\t} else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n\t\t\t\tflyZoom();\n\t\t\t}\n\t\t\tif (this._state !== STATE.NONE) {\n\t\t\t\tif (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject &&\n\t\t\t\t\t\tcameraAutoTumbleObject.stopOnCameraInput) {\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._state === STATE.SCROLL)\n\t\t\t\tthis._state = STATE.NONE;\n\t\t}\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.update();\n\t\t\t//this.directionalLight.target.position.set(this.cameraObject.target.x, \n\t\t\t//\tthis.cameraObject.target.y, this.cameraObject.target.z);\n\t\t} else {\n\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t}\n\t};\n\t\n /**\n * Switch to path mode and begin traveling through the camera path.\n */\n\tthis.playPath = () => {\n\t\tcurrentMode = MODE.PATH;\n\t}\n\n /**\n * Stop playing path and switch back to normal control.\n */\n\tthis.stopPath = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n /**\n * Check rather the control is currently in path mode.\n * \n * @return {Boolean}\n */\n\tthis.isPlayingPath = () => {\n\t\treturn (currentMode === MODE.PATH);\n\t}\n\t\n /**\n * Enable directional light update as the camera\n * is traveling through path.\n * \n * @param {Boolean} flag\n */\n\tthis.enableDirectionalLightUpdateWithPath = flag => {\n\t\tupdateLightWithPathFlag = flag;\n\t}\n\t\n /**\n * Enable rotation using the devices's accelerometer.\n */\n\tthis.enableDeviceOrientation = () => {\n\t\tif (!deviceOrientationControl)\n\t\t\tdeviceOrientationControl = new ModifiedDeviceOrientationControls(this.cameraObject);\n\t}\n\n /**\n * Disable rotation using the devices's accelerometer.\n */\n\tthis.disableDeviceOrientation = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.dispose();\n\t\t\tdeviceOrientationControl = undefined;\n\t\t}\n\t}\n\n /**\n * Check rather device orientation based on accelerometer is on.\n */\n\tthis.isDeviceOrientationEnabled = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n /**\n * Reset the viewport settings to the one provided by default viewport.\n */\n\tthis.resetView = () => {\n const viewport = viewports[defaultViewport];\n\t\tthis.cameraObject.near = viewport.nearPlane;\n\t\tthis.cameraObject.far = viewport.farPlane;\n\t\tthis.cameraObject.position.set( viewport.eyePosition[0], viewport.eyePosition[1],\n viewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( viewport.upVector[0], viewport.upVector[1],\n viewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n /**\n * Set the current camera settings with the provided viewport.\n * \n * @param {Viewport} newViewport - viewport settings.\n */\n\tthis.setCurrentCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tthis.cameraObject.near = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tthis.cameraObject.far = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tthis.cameraObject.position.set( newViewport.eyePosition[0], \n\t\t\t\t\tnewViewport.eyePosition[1], newViewport.eyePosition[2]);\n\t\tif (newViewport.targetPosition)\n\t\t\tthis.cameraObject.target.set( newViewport.targetPosition[0],\n\t\t\t\t\tnewViewport.targetPosition[1], newViewport.targetPosition[2] );\n\t\tif (newViewport.upVector)\n\t\t\tthis.cameraObject.up.set( newViewport.upVector[0], newViewport.upVector[1],\n\t\t\t\t\tnewViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n /**\n * Get the viewport based on centre, radius, view_angle and clip distance.\n * \n * @param {Number} centreX - x coordinate of the centre.\n * @param {Number} centreY - y coordinate of the centre.\n * @param {Number} centreZ - z coordinate of the centre.\n * @param {Number} radius - radius if the viewport.\n * @param {Number} view_angle - view angle.\n * @param {Number} clip_distance - clip_distance between the near and far plane.\n * \n * @return {Viewport}\n */\t\n\tthis.getViewportFromCentreAndRadius = (centreX, centreY, centreZ, radius, view_angle, clip_distance) => {\n\t\tlet eyex = this.cameraObject.position.x-this.cameraObject.target.x;\n\t\tlet eyey = this.cameraObject.position.y-this.cameraObject.target.y;\n\t\tlet eyez = this.cameraObject.position.z-this.cameraObject.target.z;\n\t\tconst fact = 1.0/Math.sqrt(eyex*eyex+eyey*eyey+eyez*eyez);\n\t\teyex = eyex * fact;\n\t\teyey = eyey * fact;\n\t\teyez = eyez * fact;\n\t\t/* look at the centre of the sphere */\n\t\tconst localTargetPosition = [centreX, centreY, centreZ];\n\t\t/* shift the eye position to achieve the desired view_angle */\n\t\tconst eye_distance = radius/Math.tan(view_angle*Math.PI/360.0);\n\t\tconst localEyePosition = [ centreX + eyex*eye_distance, centreY + eyey*eye_distance,\n\t\t centreZ + eyez*eye_distance];\n\t\tconst localFarPlane = eye_distance+clip_distance;\n\t\tlet localNearPlane = 0.0;\n\t\tconst nearClippingFactor = 0.95;\n\t\tif (clip_distance > nearClippingFactor*eye_distance)\n\t\t{\n\t\t\tlocalNearPlane = (1.0 - nearClippingFactor)*eye_distance;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlocalNearPlane = eye_distance - clip_distance;\n\t\t}\n\t\tconst newViewport = new Viewport();\n\t\tnewViewport.nearPlane = localNearPlane;\n\t\tnewViewport.farPlane = localFarPlane;\n\t\tnewViewport.eyePosition = localEyePosition;\n\t\tnewViewport.targetPosition = localTargetPosition;\n\t\tnewViewport.upVector = [this.cameraObject.up.x, this.cameraObject.up.y,\n\t\t this.cameraObject.up.z];\n\t\t\n\t\treturn newViewport;\n\t}\n\n /**\n * Get the current camera viewport.\n * \n * @return {Viewport}\n */\n\tthis.getCurrentViewport = () => {\n\t\tconst currentViewport = new Viewport();\n\t\tcurrentViewport.nearPlane = this.cameraObject.near;\n\t\tcurrentViewport.farPlane = this.cameraObject.far;\n\t\tcurrentViewport.eyePosition[0] = this.cameraObject.position.x;\n\t\tcurrentViewport.eyePosition[1] = this.cameraObject.position.y;\n\t\tcurrentViewport.eyePosition[2] = this.cameraObject.position.z;\n\t\tcurrentViewport.targetPosition[0] = this.cameraObject.target.x;\n\t\tcurrentViewport.targetPosition[1] = this.cameraObject.target.y;\n\t\tcurrentViewport.targetPosition[2] = this.cameraObject.target.z;\n\t\tcurrentViewport.upVector[0] = this.cameraObject.up.x;\n\t\tcurrentViewport.upVector[1] = this.cameraObject.up.y;\n\t\tcurrentViewport.upVector[2] = this.cameraObject.up.z;\n\t\treturn currentViewport;\n\t}\n\t\n\tthis.getDefaultEyePosition = () => {\n\t\treturn eyePosition;\n\t}\n\t\n\tthis.getDefaultTargetPosition = () => {\n\t\treturn targetPosition;\n\t}\n\n /**\n * Setup a smooth transition object which transition the camera from one \n * viewport to the other in the specified duration. This will not work if \n * {@link rotateCameraTransition} is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {Viewport} startingViewport - the starting viewport\n * @param {Viewport} endingViewport - the viewport ti end the transistion with.\n * @param {Number} durationIn - duration of the smooth transition.\n */\n\tthis.cameraTransition = (startingViewport, endingViewport, durationIn) => {\n\t if (rotateCameraTransitionObject == undefined)\n\t smoothCameraTransitionObject = new SmoothCameraTransition(startingViewport, endingViewport,\n\t this, durationIn);\n\t}\n\n /**\n * Setup a rotate camera transition object which rotate the \n * camera by the specified the angle in the specified \n * duration. This will not work if {@link cameraTransition}\n * is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {THREE.Vector3} axis - the starting viewport\n * @param {Number} angle - the viewport ti end the transistion with.\n * @param {Number} duration - duration of the smooth transition.\n */\n\tthis.rotateCameraTransition = (axis, angle, duration) => {\n\t if (smoothCameraTransitionObject == undefined)\n\t rotateCameraTransitionObject = new RotateCameraTransition(axis, angle,\n\t this, duration);\n\t}\n\n /**\n * Enable camera transition, {@link rotateCameraTransition} amd\n * {@link cameraTransition} must be called before camera transition can\n * be enabled.\n */\n\tthis.enableCameraTransition = () => {\n\t if (smoothCameraTransitionObject)\n\t currentMode = MODE.SMOOTH_CAMERA_TRANSITION;\n\t if (rotateCameraTransitionObject)\n\t currentMode = MODE.ROTATE_CAMERA_TRANSITION;\n\t}\n\n /**\n * Pause the camera transition.\n */\n\tthis.pauseCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\n /**\n * Stop the camera transition and remove camera transition\n * and rotate camera transition.\n */\n\tthis.stopCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tsmoothCameraTransitionObject = undefined;\n\t\trotateCameraTransitionObject = undefined;\n\t}\n\n /**\n * Check if camera transition is active.\n */\n\tthis.isTransitioningCamera = () => {\n\t\treturn (currentMode === MODE.SMOOTH_CAMERA_TRANSITION ||\n\t\t currentMode === MODE.ROTATE_CAMERA_TRANSITION);\n\t}\n \n /**\n * Setup auto tumble object of the camera which will rotate the camera\n * around the target as if the user is rotating the camera by mouse/touch\n * interaction.\n * The tumbling will only be enabled with {@link enabelAutoTumble}. \n * \n * @param {Array} tumbleDirectionIn - direction of the mouse/touch.\n * @param {Number} tumbleRateIn - Speed of the tumbling.\n * @param {Boolean} stopOnCameraInputIn - Disable the tumbling once the user\n * start interacting with the scene.\n */\n\tthis.autoTumble = (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn) => {\n\t\tcameraAutoTumbleObject = new CameraAutoTumble(tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, this);\n\t}\n\n /**\n * Enable autotumble.\n */\n\tthis.enableAutoTumble = () => {\n\t\tcurrentMode = MODE.AUTO_TUMBLE;\n\t}\n\n /**\n * Disable the autotumble.\n */\n\tthis.stopAutoTumble = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tcameraAutoTumbleObject = undefined;\n\t}\n\n /**\n * Update the autotumble object.\n */\n\tthis.updateAutoTumble = () => {\n\t\tif (cameraAutoTumbleObject)\n\t\t\tcameraAutoTumbleObject.requireUpdate = true;\n\t}\n\n /**\n * Check rather autotumble is active.\n * \n * @return {Boolean}\n */\n\tthis.isAutoTumble = () => {\n\t\treturn (currentMode === MODE.AUTO_TUMBLE);\n\t}\n\t\n /**\n * Create an internal raycaster object and enable it for picking.\n * \n * @param {Scene} sceneIn - The scene to pick from, it can be different from the\n * camera's scene.\n * @param {requestCallback} callbackFunctionIn - The callback for pick event.\n * @param {requestCallback} hoverCallbackFunctionIn - The callback for hover\n * over event.\n */\n this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n if (zincRayCaster == undefined)\n zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n }\n\n /**\n * Disable raycaster and remove the internal ray caster object.\n */\n this.disableRaycaster = () => {\n zincRayCaster.disable();\n zincRayCaster = undefined;\n }\n\n /**\n * Check rather the camera is in syncControl mode.\n * \n * @return {Boolean}\n */\n this.isSyncControl = () => {\n return currentMpde === MODE.SYNC_CONTROL;\n }\n\n /**\n * Enable syncControl.\n */\n this.enableSyncControl = () => {\n currentMode = MODE.SYNC_CONTROL;\n if (!ndcControl)\n ndcControl = new NDCCameraControl();\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n return ndcControl;\n }\n\n /**\n * Disable syncControl.\n */\n this.disableSyncControl = () => {\n currentMode = MODE.DEFAULT;\n this.cameraObject.zoom = 1;\n this.cameraObject.updateProjectionMatrix();\n }\n\t\n\tthis.enable();\n\n};\n\nconst SmoothCameraTransition = function(startingViewport, endingViewport, targetCameraIn, durationIn) {\n\tconst startingEyePosition = startingViewport.eyePosition;\n\tconst startingTargetPosition = startingViewport.targetPosition;\n\tconst startingUp = startingViewport.upVector;\n\tconst endingEyePosition = endingViewport.eyePosition;\n\tconst endingTargetPosition = endingViewport.targetPosition;\n\tconst endingUp = endingViewport.upVector;\n\tconst targetCamera = targetCameraIn;\n\tlet duration = durationIn;\n\tlet inbuildTime = 0;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tlet completed = false;\n\ttargetCamera.near = Math.min(startingViewport.nearPlane, endingViewport.nearPlane);\n\ttargetCamera.far = Math.max(startingViewport.farPlane, endingViewport.farPlane);\n\ttargetCamera.cameraObject.up.set( endingViewport.upVector[0], endingViewport.upVector[1],\n endingViewport.upVector[2]);\n \n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\t\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = duration;\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\tconst updateCameraSettings = () => {\n\t\tconst ratio = inbuildTime / duration;\n\t\tconst eyePosition = [startingEyePosition[0] * (1.0 - ratio) + endingEyePosition[0] * ratio,\n\t\t startingEyePosition[1] * (1.0 - ratio) + endingEyePosition[1] * ratio,\n\t\t startingEyePosition[2] * (1.0 - ratio) + endingEyePosition[2] * ratio];\n\t\tconst targetPosition = [startingTargetPosition[0] * (1.0 - ratio) + endingTargetPosition[0] * ratio,\n\t\t startingTargetPosition[1] * (1.0 - ratio) + endingTargetPosition[1] * ratio,\n\t\t startingTargetPosition[2] * (1.0 - ratio) + endingTargetPosition[2] * ratio];\n const upVector = [startingUp[0] * (1.0 - ratio) + endingUp[0] * ratio,\n startingUp[1] * (1.0 - ratio) + endingUp[1] * ratio,\n startingUp[2] * (1.0 - ratio) + endingUp[2] * ratio];\n\t\ttargetCamera.cameraObject.position.set( eyePosition[0], eyePosition[1], eyePosition[2]);\n\t\ttargetCamera.cameraObject.target.set( targetPosition[0], targetPosition[1], targetPosition[2] );\n\t};\n\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tupdateTime(delta);\n\t\t\n\t\tupdateCameraSettings();\n\t\t\n\t\tif (inbuildTime == duration) {\n\t\t\tcompleted = true;\n\t\t}\n\n\t}\n\t\n\tthis.isTransitionCompleted = () => {\n\t\treturn completed;\n\t}\n\t\n};\n\nconst RotateCameraTransition = function(axisIn, angleIn, targetCameraIn, durationIn) {\n const axis = axisIn;\n const angle = angleIn;\n const targetCamera = targetCameraIn;\n let duration = durationIn;\n let inbuildTime = 0;\n const enabled = true;\n const ratio = inbuildTime / duration;\n let completed = false;\n\n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 0.1;\n const mouse = new THREE.Vector2();\n let awaiting = false;\n let lastHoveredDate = new Date();\n let lastHoveredEmpty = false;\n let timeDiff = 0;\n let pickedObjects = new Array();\n let lastPosition = { zincCamera: undefined, x: -1 ,y: -1};\n\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n zincCamera.getNDCFromDocumentCoords(x, y, mouse);\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n raycaster.setFromCamera( mouse, zincCamera.cameraObject);\n let objects = scene.getPickableThreeJSObjects();\n //Reset pickedObjects array \n pickedObjects.length = 0;\n\t\treturn raycaster.intersectObjects( objects, true, pickedObjects );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tgetIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(pickedObjects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n getIntersectsObject(zincCamera, x, y);\n lastHoveredDate.setTime(Date.now());\n if (pickedObjects.length === 0) {\n //skip hovered callback if the previous one is empty\n if (lastHoveredEmpty)\n return\n lastHoveredEmpty = true;\n } else {\n lastHoveredEmpty = false;\n }\n hoverCallbackFunction(pickedObjects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n lastPosition.zincCamera = zincCamera;\n lastPosition.x = x;\n lastPosition.y = y;\n if (!awaiting) {\n timeDiff = lastHoveredDate ? Date.now() - lastHoveredDate.getTime() : 250;\n if (timeDiff >= 250) {\n hovered(zincCamera, x, y);\n } else {\n awaiting = true;\n setTimeout(awaitMove(lastPosition), timeDiff);\n }\n }\n }\n }\n }\n \n let awaitMove = (lastPosition) => {\n return function() {\n awaiting = false;\n hovered(lastPosition.zincCamera, lastPosition.x, lastPosition.y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nStereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\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\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nconst NDCCameraControl = function () {\n\tlet camera = undefined;\n let targetCamera = undefined;\n let defaultViewport = undefined;\n const position = new THREE.Vector3();\n const target = new THREE.Vector3();\n const v1 = new THREE.Vector3();\n const v2 = new THREE.Vector3();\n let eventCallback = undefined;\n\n this.setCurrentCameraSettings = (cameraIn, defaultViewportIn) => {\n camera = cameraIn.clone();\n targetCamera = cameraIn;\n defaultViewport = defaultViewportIn;\n camera.near = defaultViewport.nearPlane;\n if (defaultViewport.farPlane)\n camera.far = defaultViewport.farPlane;\n if (defaultViewport.eyePosition)\n camera.position.set(defaultViewport.eyePosition[0],\n defaultViewport.eyePosition[1], defaultViewport.eyePosition[2]);\n if (defaultViewport.upVector)\n camera.up.set(defaultViewport.upVector[0], defaultViewport.upVector[1],\n defaultViewport.upVector[2]);\n if (defaultViewport.targetPosition) {\n camera.target = new THREE.Vector3(defaultViewport.targetPosition[0],\n defaultViewport.targetPosition[1], defaultViewport.targetPosition[2]);\n camera.lookAt(camera.target);\n }\n camera.updateProjectionMatrix();\n position.copy(camera.position).project(camera);\n target.copy(camera.target).project(camera);\n }\n\t\n this.getCurrentPosition = () => {\n target.copy(targetCamera.target).project(camera);\n return [target.x, target.y];\n }\n\n this.zoom = delta => {\n let scaledDelta = delta * 0.002;\n let zoom = Math.max(targetCamera.zoom - scaledDelta, 1.0);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.zoomToBox = (box, zoom) => {\n box.getCenter(v1);\n v1.project(camera);\n this.setCenterZoom([v1.x, v1.y], zoom);\n }\n\t \n //return top left and size\n this.getPanZoom = () => {\n return {target: this.getCurrentPosition(), zoom: targetCamera.zoom };\n }\n\n this.setCenterZoom = (center, zoom) => {\n v1.set(center[0], center[1], target.z).unproject(camera);\n v2.copy(v1).sub(targetCamera.target);\n targetCamera.target.copy(v1);\n targetCamera.lookAt(targetCamera.target);\n targetCamera.position.add(v2);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.setEventCallback = (callback) => {\n if (callback === undefined || (typeof callback == 'function'))\n eventCallback = callback;\n }\n\n this.triggerCallback = () => {\n if (eventCallback !== undefined && (typeof eventCallback == 'function'))\n eventCallback();\n }\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\nexports.NDCCameraControl = NDCCameraControl\n","const { Group, Matrix4 } = require('three');\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"re\" + uniqueiId++;\n}\n\n/**\n * Provides a hierachical structure to objects, Each region\n * may contain multiple child regions and {@link ZincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Region}\n */\nlet Region = function (parentIn) {\n let parent = parentIn;\n let group = new Group();\n group.matrixAutoUpdate = false;\n group.userData = this;\n let children = [];\n let name = \"\";\n let zincObjects = [];\n const tMatrix = new Matrix4();\n let duration = 3000;\n tMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n this.pickableUpdateRequired = true;\n this.isRegion = true;\n this.uuid = getUniqueId();\n \n\n /**\n * Hide all primitives belong to this region.\n */\n this.hideAllPrimitives = () => {\n children.forEach(child => child.hideAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n /**\n * Show all primitives belong to this region.\n */\n this.showAllPrimitives = () => {\n children.forEach(child => child.showAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(true));\n }\n\n /**\n * Set the visibility and propagate it down the hierarchies\n * depending on the flag.\n * \n * @param {Boolean} flag - A flag indicating either the visibilty to be on/off.\n */\n this.setVisibility = (flag) => {\n group.visible = flag;\n }\n\n /**\n * Get the visibility of the region and its children.\n * \n * @return {Boolean}\n */\n this.getVisibility = () => {\n return group.visible;\n }\n\n /**\n * Get the {THREE.Group} containing all child regions and their\n * primitives.\n * \n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Set the transformation with a {THREE.Matrix4} matrix, this will affect\n * all primitives in this and its child regions\n * \n * @param {THREE.Matrix4} transformation - The transformation matrix\n * used for the transformation.\n */\n this.setTransformation = transformation => {\n tMatrix.set(...transformation);\n group.matrix.copy(tMatrix);\n group.updateMatrixWorld();\n }\n\n /**\n * Set the name of this region.\n * \n * @param {String} nameIn - Name to be set for this region. It must be defined\n * and non-empty.\n */\n this.setName = (nameIn) => {\n if (nameIn && nameIn !== \"\") {\n name = nameIn;\n }\n }\n\n /**\n * Get the name of this region.\n * \n * @return {String}\n */\n this.getName = () => {\n return name;\n }\n\n /**\n * Get the parent region.\n * \n * @return {Region}\n */\n this.getParent = () => {\n return parent;\n }\n\n /**\n * Get the array of each hierarachy from the root region to this region.\n * \n * @return {Array}\n */\n this.getFullSeparatedPath = () => {\n const paths = [];\n if (name !== \"\") {\n paths.push(name);\n for (let p = parent; p !== undefined;) {\n const parentName = p.getName();\n if (parentName !== \"\") {\n paths.unshift(parentName);\n }\n p = p.getParent();\n }\n }\n return paths;\n }\n\n /**\n * Get the full paths from the root region to this region.\n * \n * @return {String}\n */\n this.getFullPath = () => {\n const paths = this.getFullSeparatedPath();\n if (paths.length > 0) {\n let fullPath = paths.shift();\n paths.forEach(path => {\n fullPath = fullPath.concat(\"/\", path);\n });\n return fullPath;\n }\n return \"\";\n }\n\n /**\n * Create a new child region with the provided name.\n * @param {String} nameIn - Name to be set for the new child region.\n * \n * @return {Region}\n */\n this.createChild = (nameIn) => {\n let childRegion = new Region(this);\n childRegion.setName(nameIn);\n children.push(childRegion);\n group.add(childRegion.getGroup());\n return childRegion;\n }\n\n /**\n * Get the child region with matching childName.\n * @param {String} childName - Name to be matched.\n * \n * @return {Region}\n */\n this.getChildWithName = childName => {\n if (childName) {\n const lowerChildName = childName.toLowerCase();\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName().toLowerCase() === lowerChildName)\n return children[i];\n }\n }\n return undefined;\n }\n\n /**\n * Find a child region using the path array.\n * @param {Array} pathArray - Array containing regions' name at each\n * hierarchy to match.\n * \n * @return {Region}\n */\n this.findChildFromSeparatedPath = pathArray => {\n if (pathArray && pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray && pathArray.length > 0) {\n const childRegion = this.getChildWithName(pathArray[0]);\n if (childRegion) {\n pathArray.shift();\n return childRegion.findChildFromSeparatedPath(pathArray);\n } else {\n return undefined;\n }\n }\n return this;\n }\n\n /**\n * Find the region using the provided relative path.\n * \n * @param {String} path - Relative paths from this region\n * to the child region.\n * \n * @return {Region}\n */\n this.findChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.findChildFromSeparatedPath(pathArray);\n }\n\n /**\n * Create a new child using the path array. All required new regions\n * down the path will be created.\n * \n * @param {Array} pathArray - Array containing regions' name, new regions\n * will be created along the path if not found.\n * \n * @return {Region}\n */\n this.createChildFromSeparatedPath = pathArray => {\n if (pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray.length > 0) {\n let childRegion = this.getChildWithName(pathArray[0]);\n if (!childRegion) {\n childRegion = this.createChild(pathArray[0]);\n }\n pathArray.shift();\n return childRegion.createChildFromSeparatedPath(pathArray);\n }\n return this;\n }\n\n /**\n * Create a new child using the path. All required new regions\n * down the path will be created.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.createChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.createChildFromSeparatedPath(pathArray);\n }\n\n\n /**\n * Return existing region if it exists, otherwise, create a new\n * region with the provided path.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.findOrCreateChildFromPath = (path) => {\n let childRegion = this.findChildFromPath(path);\n if (!childRegion) {\n childRegion = this.createChildFromPath(path);\n }\n return childRegion;\n }\n\n /**\n * Add a zinc object into this region, the morph will be added\n * to the group.\n * \n * @param {ZincObject} zincObject - Zinc object to be added into\n * this region.\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n zincObject.setRegion(this);\n group.add(zincObject.morph);\n zincObjects.push(zincObject);\n this.pickableUpdateRequired = true;\n }\n }\n\n /**\n * Remove a ZincObject from this region if it presents. This will eventually\n * destroy the object and free up the memory.\n * \n * @param {ZincObject} zincObject - object to be removed from this region.\n */\n this.removeZincObject = zincObject => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n group.remove(zincObject.morph);\n zincObjects.splice(i, 1);\n zincObject.dispose();\n return;\n }\n }\n }\n\n /**\n * Return true if pickable objects require an update.\n * \n * @param {Boolean} transverse - Check child regions as well\n * if this is set to true.\n * \n * @return {Boolean}\n */\n this.checkPickableUpdateRequred = (transverse) => {\n if (this.pickableUpdateRequired) return true;\n if (transverse) {\n let flag = false;\n for (let i = 0; i < children.length; i++) {\n flag = children[i].checkPickableUpdateRequred(transverse);\n if (flag) return true;\n }\n }\n return false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = (objectsList, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.morph && zincObject.morph.visible) {\n let marker = zincObject.marker;\n if (marker && marker.isEnabled()) {\n objectsList.push(marker.morph);\n }\n objectsList.push(zincObject.morph);\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.getPickableThreeJSObjects(objectsList, transverse);\n });\n }\n this.pickableUpdateRequired = false;\n return objectsList;\n }\n\n /**\n * Set the default duration value for all zinc objects\n * that are to be loaded into this region.\n * \n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n duration = durationIn;\n zincObjects.forEach(zincObject => zincObject.setDuration(durationIn));\n children.forEach(childRegion => childRegion.setDuration(durationIn));\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Get the bounding box of all the object in this and child regions only.\n * Do not include the matrix transformation here, it is done at the primitives\n * level.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = transverse => {\n let boundingBox1 = undefined, boundingBox2 = undefined;\n zincObjects.forEach(zincObject => {\n boundingBox2 = zincObject.getBoundingBox();\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n boundingBox2 = childRegion.getBoundingBox(transverse);\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n }\n return boundingBox1;\n }\n\n /**\n * Clear and dispose all objects belong to this region.\n * \n * @param {Boolean} transverse - Clear and dispose child regions as well\n * if this is set to true.\n */\n this.clear = transverse => {\n if (transverse) {\n children.forEach(childRegion => childRegion.clear(transverse));\n }\n zincObjects.forEach(zincObject => {\n group.remove(zincObject.morph);\n zincObject.dispose();\n });\n children = [];\n zincObjects = [];\n }\n\n /**\n * Check if a zincObject is a member of this region.\n * \n * @param {ZincObject} zincObject - The ZincObject to be checked.\n * @param {Boolean} transverse - Also check the child regions.\n * \n * @return {Boolean}\n */\n this.objectIsInRegion = (zincObject, transverse) => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n if (transverse) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].objectIsInRegion(zincObject, transverse))\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachGeometry = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGeometry)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGeometry(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachGlyphset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGlyphset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGlyphset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachPointset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isPointset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachPointset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachLine = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isLines)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachLine(\n callbackFunction, transverse));\n }\n\n this.findObjectsWithAnatomicalId = (anatomicalId, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.anatomicalId === anatomicalId)\n objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithAnatomicalId(anatomicalId, transverse);\n objectsArray.push(...childObjects);\n });\n }\n\n return objectsArray;\n }\n\n /** \n * Find and return all zinc objects in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = (groupName, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n const lowerObjectName = zincObject.groupName ? zincObject.groupName.toLowerCase() : zincObject.groupName;\n const lowerGroupName = groupName ? groupName.toLowerCase() : groupName;\n if (lowerObjectName === lowerGroupName)\n objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithGroupName(groupName, transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Find and return all geometries in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const geometriesArray = primitivesArray.filter(primitive => primitive.isGeometry);\n return geometriesArray;\n }\n\n /** \n * Find and return all pointsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const pointsetsArray = primitivesArray.filter(primitive => primitive.isPointset);\n return pointsetsArray;\n }\n\n /** \n * Find and return all glyphsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const glyphsetsArray = primitivesArray.filter(primitive => primitive.isGlyphset);\n return glyphsetsArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findLinesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const linesArray = primitivesArray.filter(primitive => primitive.isLines);\n return linesArray;\n }\n\n /** \n * Get all zinc objects in this region.\n * \n * @param {Boolean} transverse - Include zinc objects in child regions if this is\n * set to true.\n * @returns {Array}\n */\n this.getAllObjects = transverse => {\n const objectsArray = [...zincObjects];\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.getAllObjects(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Get all child regions.\n * \n * @param {Boolean} transverse - Include all regions which are descendants of \n * this reigon when this is set to true.\n * @returns {Array}\n */\n this.getChildRegions = transverse => {\n const objectsArray = [...children];\n if (transverse) {\n children.forEach(childRegion => {\n const childObjects = childRegion.getChildRegions(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /**\n * Get the current time of the region.\n * Return -1 if no graphics in the region.\n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\n } else {\n for (let i = 0; i < children.length; i++) {\n const time = children[i].getCurrentTime();\n if (time !== -1)\n return time;\n }\n }\n return -1;\n }\n\n /**\n * Set the current time of all the objects of this region.\n * \n * @param {Number} time - Value to set the time to.\n * @param {Boolean} transverse - Set the time for chidl regions if\n * this is set to true.\n */\n this.setMorphTime = (time, transverse) => {\n zincObjects.forEach(zincObject => {\n zincObject.setMorphTime(time);\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.setMorphTime(time);\n });\n }\n }\n\n /**\n * Check if any object in this region is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isTimeVarying()) {\n return true;\n }\n }\n for (let i = 0; i < children.length; i++) {\n if (children[i].isTimeVarying()) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation, options, transverse) => {\n // Let video dictates the progress if one is present\n const allObjects = this.getAllObjects(transverse);\n allObjects.forEach(zincObject => {\n zincObject.render(playRate * delta, playAnimation, options);\n });\n //process markers visibility and size\n if (options && options.displayMarkers && (playAnimation === false)) {\n if (options.markerDepths.length > 0) {\n const min = Math.min(...options.markerDepths);\n const max = Math.max(...options.markerDepths);\n allObjects.forEach(zincObject => {\n zincObject.processMarkerVisual(min, max, options);\n });\n }\n }\n }\n}\n\nexports.Region = Region;\n","const THREE = require('three');\n\n/**\n * This provide a full scale minimap. It will always\n * display the whole map.\n * \n * @class\n * @author Alan Wu\n * @return {Minimap}\n */\nexports.Minimap = function (sceneIn) {\n let targetScene = sceneIn;\n this.camera = new THREE.OrthographicCamera(\n -0.5, 0.5, 0.5, -0.5, 0.01, 10);\n this.helper = undefined;\n let geometry = new THREE.BufferGeometry();\n var vertices = new Float32Array( [\n -1.0, -1.0, 1.0,\n 1.0, -1.0, 1.0,\n 1.0, 1.0, 1.0,\n 1.0, 1.0, 1.0,\n -1.0, 1.0, 1.0,\n -1.0, -1.0, 1.0\n ] );\n let positionAttributes = new THREE.BufferAttribute( vertices, 3 );\n geometry.setAttribute( 'position', positionAttributes);\n var material = new THREE.MeshBasicMaterial( { color: 0x333333, \n depthTest: false,\n depthWrite: false,\n opacity: 0.5,\n transparent: true } );\n this.mask = new THREE.Mesh( geometry, material );\n let _box = new THREE.Box3();\n let _center = new THREE.Vector3();\n\n this.getDiffFromNormalised = (x, y) => {\n _box.setFromBufferAttribute(positionAttributes).getCenter(_center);\n let coord = _center.clone().project(this.camera);\n let new_coord = new THREE.Vector3(x, y, coord.z).unproject(this.camera);\n return new_coord.sub(_center);\n }\n\n let setCurrentCameraSettings = (diameter, newViewport) => {\n if (targetScene.camera.near)\n this.camera.near = targetScene.camera.near;\n if (newViewport.farPlane)\n this.camera.far = newViewport.farPlane;\n if (newViewport.eyePosition)\n this.camera.position.set(newViewport.eyePosition[0],\n newViewport.eyePosition[1], newViewport.eyePosition[2]);\n if (newViewport.upVector)\n this.camera.up.set(newViewport.upVector[0], newViewport.upVector[1],\n newViewport.upVector[2]);\n if (newViewport.targetPosition)\n this.camera.lookAt(new THREE.Vector3(newViewport.targetPosition[0],\n newViewport.targetPosition[1], newViewport.targetPosition[2]));\n this.camera.zoom = 1 / diameter;\n this.camera.updateProjectionMatrix();\n }\n\n this.getBoundary = () => {\n let target = new THREE.Vector3().copy(\n targetScene.camera.target).project(targetScene.camera);\n let v1 = new THREE.Vector3(-1, -1, target.z).unproject(targetScene.camera);\n let v2 = new THREE.Vector3(1, -1, target.z).unproject(targetScene.camera);\n let v3 = new THREE.Vector3(1, 1, target.z).unproject(targetScene.camera);\n let v4 = new THREE.Vector3(-1, 1, target.z).unproject(targetScene.camera);\n let array = [v1, v2, v3, v3, v4, v1];\n positionAttributes.copyVector3sArray(array);\n positionAttributes.needsUpdate = true;\n }\n\n this.updateCamera = () => {\n this.getBoundary();\n let cameraControl = targetScene.getZincCameraControls();\n let boundingBox = targetScene.getBoundingBox();\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const diameter = boundingBox.min.distanceTo(boundingBox.max);\n const radius = diameter / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = cameraControl.getViewportFromCentreAndRadius(\n centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n setCurrentCameraSettings(diameter, viewport);\n }\n }\n}\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Geometry = require('./primitives/geometry').Geometry;\nconst work = require('webworkify-webpack');\nconst Promise = require('promise-polyfill').default;\n//const work = undefined;\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nconst GeometryCSG = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n\thost = hostIn;\n let core = undefined;\n let worker = undefined;\n let onProgress = false;\n let myResolve = undefined;\n \n var createGeometryFromJSON = json => {\n\t \tconst material = host.morph.material.clone();\n\t \tmaterial.morphTargets = false;\n\t const newGeometry = new Geometry();\n\t\tconst JSONParser = new JSONLoader();\n\t\tconst geometry = JSONParser.parse(json);\n const mesh = new THREE.Mesh(geometry.geometry, material);\n\t newGeometry.geometry = mesh.geometry;\n\t newGeometry.morph = mesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n var workerEventHandler = ev => {\n\t switch (ev.data.action) {\n\t \tcase 'message':\n\t console.log(ev.data.message);\n\t break;\n\t \tcase 'result':\n\t \tconst csg = new GeometryCSG(createGeometryFromJSON(ev.data.object));\n\t \tif (myResolve)\n\t \t\tmyResolve(csg);\n\t \tmyResolve = undefined;\n\t \tonProgress = false;\n\t break;\n\t \tdefault:\n\t \tthrow 'Cannot handle specified action.';\n }\n }\n \n var initialise = hostIn => {\n\t if (work !== undefined) {\n\t\tworker = work(require.resolve('./workers/geometryCSG.worker.js'));\n\t }\n\t if (!worker) {\n\t core = new (require('./workers/geometryCSGInternal').GeometryCSGInternal)(hostIn);\n\t } else {\n\t\tif (hostIn && hostIn.isGeometry) {\n\t\t let mesh = hostIn.morph;\n\t\t let json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t worker.addEventListener('message', function (ev) {\n\t\t\t workerEventHandler(ev);\n\t\t });\n\t\t worker.postMessage({action: \"initialise\", object: json});\n\t\t}\n\t }\n }\n \n this.getHostGeometry = () => {\n\tconst tempCSG = new ThreeBSP(host.morph);\n return new createZincGeometry(tempCSG);\n }\n \n this.getGeometry = () => host;\n \n const createZincGeometry = csgMesh => {\n\t\tconst material = host.morph.material.clone();\n\t\tmaterial.morphTargets = false;\n\t\tconst newMesh = csgMesh.toMesh(material);\n\t const newGeometry = new Geometry();\n\t newGeometry.geometry = newMesh.geometry;\n\t newGeometry.morph = newMesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n this.setCSG = CSG => {\n\t core.setCSG(CSG);\n } \n \n const sendToWork = (guestGeometry, action, resolve, reject) => {\n\t if (!onProgress) {\n\t\t let mesh = guestGeometry.morph;\n\t\t const json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t myResolve = resolve;\n\t\t onProgress = true;\n\t\t worker.postMessage({action: action, object: json});\n\t } else {\n\t\t reject(\"On progress\");\n\t }\n }\n \n this.intersect = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.intersect(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n\t};\n \n this.subtract = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.subtract(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.union = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.union(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.terminateWorker = () => {\n\t if (worker)\n\t\t worker.terminate();\n }\n \n initialise(hostIn);\n};\n\nexports.GeometryCSG = GeometryCSG;\n","'use strict';\n\t\n\tvar ThreeBSP,\n\t\tEPSILON = 1e-5,\n\t\tCOPLANAR = 0,\n\t\tFRONT = 1,\n\t\tBACK = 2,\n\t\tSPANNING = 3;\n\t\n module.exports = function( THREE ) {\n var ThreeBSP = function( geometry ) {\n // Convert THREE.Geometry to ThreeBSP\n var i, _length_i,\n face, vertex, faceVertexUvs, uvs,\n polygon,\n polygons = [],\n tree;\n \n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n if ( geometry instanceof THREE.Geometry ) {\n this.matrix = new THREE.Matrix4;\n } else if ( geometry.isMesh ) {\n // #todo: add hierarchy support\n geometry.updateMatrix();\n this.matrix = geometry.matrix.clone();\n geometry = geometry.geometry;\n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n geometry.mergeVertices();\n geometry.computeVertexNormals(false);\n } else if ( geometry instanceof ThreeBSP.Node ) {\n this.tree = geometry;\n this.matrix = new THREE.Matrix4;\n return this;\n } else {\n throw 'ThreeBSP: Given geometry is unsupported';\n }\n \n for ( i = 0, _length_i = geometry.faces.length; i < _length_i; i++ ) {\n face = geometry.faces[i];\n faceVertexUvs = geometry.faceVertexUvs[0][i];\n polygon = new ThreeBSP.Polygon;\n \n if ( face instanceof THREE.Face3 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else if ( typeof THREE.Face4 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[1], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.d ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[3].x, faceVertexUvs[3].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[3], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else {\n throw 'Invalid face type at index ' + i;\n }\n \n polygon.calculateProperties();\n polygons.push( polygon );\n };\n \n this.tree = new ThreeBSP.Node( polygons );\n };\n ThreeBSP.prototype.subtract = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.union = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.intersect = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n b.clipTo( a );\n b.invert();\n a.clipTo( b );\n b.clipTo( a );\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.toGeometry = function() {\n var i, j,\n matrix = new THREE.Matrix4().getInverse( this.matrix ),\n geometry = new THREE.Geometry(),\n polygons = this.tree.allPolygons(),\n polygon_count = polygons.length,\n polygon, polygon_vertice_count,\n vertice_dict = {},\n vertex_idx_a, vertex_idx_b, vertex_idx_c,\n vertex, face,\n verticeUvs;\n \n for ( i = 0; i < polygon_count; i++ ) {\n polygon = polygons[i];\n polygon_vertice_count = polygon.vertices.length;\n \n for ( j = 2; j < polygon_vertice_count; j++ ) {\n verticeUvs = [];\n \n vertex = polygon.vertices[0];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n \n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j-1];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n face = new THREE.Face3(\n vertex_idx_a,\n vertex_idx_b,\n vertex_idx_c,\n new THREE.Vector3( polygon.normal.x, polygon.normal.y, polygon.normal.z )\n );\n \n geometry.faces.push( face );\n geometry.faceVertexUvs[0].push( verticeUvs );\n }\n \n }\n return geometry;\n };\n ThreeBSP.prototype.toBufferGeometry = function( ) {\n var geometry = this.toGeometry();\n var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\n\n return bufferGeometry;\n };\n ThreeBSP.prototype.toMesh = function( material ) {\n var geometry = this.toBufferGeometry(),\n mesh = new THREE.Mesh( geometry, material );\n \n mesh.position.setFromMatrixPosition( this.matrix );\n mesh.rotation.setFromRotationMatrix( this.matrix );\n \n return mesh;\n };\n \n \n ThreeBSP.Polygon = function( vertices, normal, w ) {\n if ( !( vertices instanceof Array ) ) {\n vertices = [];\n }\n \n this.vertices = vertices;\n if ( vertices.length > 0 ) {\n this.calculateProperties();\n } else {\n this.normal = this.w = undefined;\n }\n };\n ThreeBSP.Polygon.prototype.calculateProperties = function() {\n var a = this.vertices[0],\n b = this.vertices[1],\n c = this.vertices[2];\n \n this.normal = b.clone().subtract( a ).cross(\n c.clone().subtract( a )\n ).normalize();\n \n this.w = this.normal.clone().dot( a );\n \n return this;\n };\n ThreeBSP.Polygon.prototype.clone = function() {\n var i, vertice_count,\n polygon = new ThreeBSP.Polygon;\n \n for ( i = 0, vertice_count = this.vertices.length; i < vertice_count; i++ ) {\n polygon.vertices.push( this.vertices[i].clone() );\n };\n polygon.calculateProperties();\n \n return polygon;\n };\n \n ThreeBSP.Polygon.prototype.flip = function() {\n var i, vertices = [];\n \n this.normal.multiplyScalar( -1 );\n this.w *= -1;\n \n for ( i = this.vertices.length - 1; i >= 0; i-- ) {\n vertices.push( this.vertices[i] );\n };\n this.vertices = vertices;\n \n return this;\n };\n ThreeBSP.Polygon.prototype.classifyVertex = function( vertex ) { \n var side_value = this.normal.dot( vertex ) - this.w;\n \n if ( side_value < -EPSILON ) {\n return BACK;\n } else if ( side_value > EPSILON ) {\n return FRONT;\n } else {\n return COPLANAR;\n }\n };\n ThreeBSP.Polygon.prototype.classifySide = function( polygon ) {\n var i, vertex, classification,\n num_positive = 0,\n num_negative = 0,\n vertice_count = polygon.vertices.length;\n \n for ( i = 0; i < vertice_count; i++ ) {\n vertex = polygon.vertices[i];\n classification = this.classifyVertex( vertex );\n if ( classification === FRONT ) {\n num_positive++;\n } else if ( classification === BACK ) {\n num_negative++;\n }\n }\n \n if ( num_positive > 0 && num_negative === 0 ) {\n return FRONT;\n } else if ( num_positive === 0 && num_negative > 0 ) {\n return BACK;\n } else if ( num_positive === 0 && num_negative === 0 ) {\n return COPLANAR;\n } else {\n return SPANNING;\n }\n };\n ThreeBSP.Polygon.prototype.splitPolygon = function( polygon, coplanar_front, coplanar_back, front, back ) {\n var classification = this.classifySide( polygon );\n \n if ( classification === COPLANAR ) {\n \n ( this.normal.dot( polygon.normal ) > 0 ? coplanar_front : coplanar_back ).push( polygon );\n \n } else if ( classification === FRONT ) {\n \n front.push( polygon );\n \n } else if ( classification === BACK ) {\n \n back.push( polygon );\n \n } else {\n \n var vertice_count,\n i, j, ti, tj, vi, vj,\n t, v,\n f = [],\n b = [];\n \n for ( i = 0, vertice_count = polygon.vertices.length; i < vertice_count; i++ ) {\n \n j = (i + 1) % vertice_count;\n vi = polygon.vertices[i];\n vj = polygon.vertices[j];\n ti = this.classifyVertex( vi );\n tj = this.classifyVertex( vj );\n \n if ( ti != BACK ) f.push( vi );\n if ( ti != FRONT ) b.push( vi );\n if ( (ti | tj) === SPANNING ) {\n t = ( this.w - this.normal.dot( vi ) ) / this.normal.dot( vj.clone().subtract( vi ) );\n v = vi.interpolate( vj, t );\n f.push( v );\n b.push( v );\n }\n }\n \n \n if ( f.length >= 3 ) front.push( new ThreeBSP.Polygon( f ).calculateProperties() );\n if ( b.length >= 3 ) back.push( new ThreeBSP.Polygon( b ).calculateProperties() );\n }\n };\n \n ThreeBSP.Vertex = function( x, y, z, normal, uv ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.normal = normal || new THREE.Vector3;\n this.uv = uv || new THREE.Vector2;\n };\n ThreeBSP.Vertex.prototype.clone = function() {\n return new ThreeBSP.Vertex( this.x, this.y, this.z, this.normal.clone(), this.uv.clone() );\n };\n ThreeBSP.Vertex.prototype.add = function( vertex ) {\n this.x += vertex.x;\n this.y += vertex.y;\n this.z += vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.subtract = function( vertex ) {\n this.x -= vertex.x;\n this.y -= vertex.y;\n this.z -= vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.multiplyScalar = function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n };\n ThreeBSP.Vertex.prototype.cross = function( vertex ) {\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * vertex.z - z * vertex.y;\n this.y = z * vertex.x - x * vertex.z;\n this.z = x * vertex.y - y * vertex.x;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.normalize = function() {\n var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n \n this.x /= length;\n this.y /= length;\n this.z /= length;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.dot = function( vertex ) {\n return this.x * vertex.x + this.y * vertex.y + this.z * vertex.z;\n };\n ThreeBSP.Vertex.prototype.lerp = function( a, t ) {\n this.add(\n a.clone().subtract( this ).multiplyScalar( t )\n );\n \n this.normal.add(\n a.normal.clone().sub( this.normal ).multiplyScalar( t )\n );\n \n this.uv.add(\n a.uv.clone().sub( this.uv ).multiplyScalar( t )\n );\n \n return this;\n };\n ThreeBSP.Vertex.prototype.interpolate = function( other, t ) {\n return this.clone().lerp( other, t );\n };\n ThreeBSP.Vertex.prototype.applyMatrix4 = function ( m ) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x, y = this.y, z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n };\n \n \n ThreeBSP.Node = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n\n this.polygons = [];\n this.front = this.back = undefined;\n \n if ( !(polygons instanceof Array) || polygons.length === 0 ) return;\n\n this.divider = polygons[0].clone();\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n this.front = new ThreeBSP.Node( front );\n }\n \n if ( back.length > 0 ) {\n this.back = new ThreeBSP.Node( back );\n }\n };\n ThreeBSP.Node.isConvex = function( polygons ) {\n var i, j;\n for ( i = 0; i < polygons.length; i++ ) {\n for ( j = 0; j < polygons.length; j++ ) {\n if ( i !== j && polygons[i].classifySide( polygons[j] ) !== BACK ) {\n return false;\n }\n }\n }\n return true;\n };\n ThreeBSP.Node.prototype.build = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n \n if ( !this.divider ) {\n this.divider = polygons[0].clone();\n }\n\n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n if ( !this.front ) this.front = new ThreeBSP.Node();\n this.front.build( front );\n }\n \n if ( back.length > 0 ) {\n if ( !this.back ) this.back = new ThreeBSP.Node();\n this.back.build( back );\n }\n };\n ThreeBSP.Node.prototype.allPolygons = function() {\n var polygons = this.polygons.slice();\n if ( this.front ) polygons = polygons.concat( this.front.allPolygons() );\n if ( this.back ) polygons = polygons.concat( this.back.allPolygons() );\n return polygons;\n };\n ThreeBSP.Node.prototype.clone = function() {\n var node = new ThreeBSP.Node();\n \n node.divider = this.divider.clone();\n node.polygons = this.polygons.map( function( polygon ) { return polygon.clone(); } );\n node.front = this.front && this.front.clone();\n node.back = this.back && this.back.clone();\n \n return node;\n };\n ThreeBSP.Node.prototype.invert = function() {\n var i, polygon_count, temp;\n \n for ( i = 0, polygon_count = this.polygons.length; i < polygon_count; i++ ) {\n this.polygons[i].flip();\n }\n \n this.divider.flip();\n if ( this.front ) this.front.invert();\n if ( this.back ) this.back.invert();\n \n temp = this.front;\n this.front = this.back;\n this.back = temp;\n \n return this;\n };\n ThreeBSP.Node.prototype.clipPolygons = function( polygons ) {\n var i, polygon_count,\n front, back;\n\n if ( !this.divider ) return polygons.slice();\n \n front = [], back = [];\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], front, back, front, back );\n }\n\n if ( this.front ) front = this.front.clipPolygons( front );\n if ( this.back ) back = this.back.clipPolygons( back );\n else back = [];\n\n return front.concat( back );\n };\n \n ThreeBSP.Node.prototype.clipTo = function( node ) {\n this.polygons = node.clipPolygons( this.polygons );\n if ( this.front ) this.front.clipTo( node );\n if ( this.back ) this.back.clipTo( node );\n };\n \n \n return ThreeBSP;\n }\n","module.exports = require(\"webworkify-webpack\");","module.exports = require(\"promise-polyfill\");","const Geometry = require('../primitives/geometry').Geometry;\nconst THREE = require('three');\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nmodule.exports = function (self) {\n\tlet core = undefined;\n\t\n\tvar geometryFromJSON = function(object) {\n\t\tvar JSONParser = new JSONLoader();\n\t\tvar geometry = JSONParser.parse(object);\n\t\tvar material = new THREE.MeshPhongMaterial();\n var mesh = new THREE.Mesh(geometry.geometry, material);\n var host = new Geometry();\n host.morph = mesh;\n return host;\n\t}\n\n\tvar initialise = function(object) {\n\t\tvar host = geometryFromJSON(object);\n\t\tcore = new (require('./geometryCSGInternal').GeometryCSGInternal)(host);\n\t\tself.postMessage({action:\"message\", message: \"Initialised\"});\n\t}\n\t\n\tvar intersect = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.intersect(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar subtract = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.subtract(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar union = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.union(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tself.addEventListener('message',function (ev){\n\t switch (ev.data.action) {\n \tcase 'initialise':\n initialise(ev.data.object);\n break;\n \tcase 'intersect':\n \t\tintersect(ev.data.object);\n break;\n \tcase 'subtract':\n \t\tsubtract(ev.data.object);\n break;\n \tcase 'union':\n \t\tunion(ev.data.object);\n break;\n \tdefault:\n \t\tthrow 'Cannot handle specified action.';\n\t }\n\t});\n\t\t\n //var test = ev.data;\n //self.postMessage(test, [test]);\n};\n\n","const THREE = require('three');\nconst ThreeBSP = require('../three-js-csg')(THREE);\nconst Geometry = require('../primitives/geometry').Geometry;\nconst GeometryCSG = require('../geometryCSG').GeometryCSG;\n\nconst GeometryCSGInternal = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n host = hostIn;\n let hostCSG = undefined;\n \n this.setGeometry = hostIn => {\n if (hostIn && hostIn.isGeometry)\n\t host = hostIn;\n hostCSG = undefined;\n }\n \n this.setCSG = csg => {\n\t hostCSG = csg;\n }\n \n const prepareCSG = guestGeometry => {\n\t if (host && host.morph && guestGeometry && guestGeometry.morph) {\n\t if (hostCSG === undefined)\n\t hostCSG = new ThreeBSP(host.morph);\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t return hostCSG.intersect(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.subtract = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.subtract(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.union = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.union(guestCSG);\n\t }\n\t return undefined;\n }\n};\n\nexports.GeometryCSGInternal = GeometryCSGInternal;\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Glyphset = require('./primitives/glyphset').Glyphset;\n\n/**\n * Provides an object which takes in a glyphset, convert it into a CSG and further\n * action such as intersect with another geometry may be performed.\n * \n * @class\n * @author Alan Wu\n * @return {GlyphsetCSG}\n */\nconst GlyphsetCSG = function (hostIn) {\n let host = undefined;\n if (hostIn && hostIn.isGlyphset)\n\t host = hostIn;\n const hostCSGs = new Array();\n const currentIntersect = undefined;\n \n this.setGlyphset = hostIn => {\n\t if (hostIn && hostIn.isGlyphset)\n\t\t host = hostIn;\n\t hostCSG = undefined;\n }\n \n this.getGlyphset = () => {\n\t return host;\n }\n \n const prepareCSGForGlyphs = () => {\n\t return glyph => {\n\t\t const mesh = glyph.getMesh();\n\t\t const label = glyph.getLabel();\n\t\t if (mesh) {\n\t\t\t const csg = new ThreeBSP(mesh.geometry.clone().applyMatrix(mesh.matrix));\n\t\t\t const store = [];\n\t\t\t store.csg = csg;\n\t\t\t store.label = label;\n\t\t\t if (mesh.material)\n\t\t\t\t store.material = mesh.material.clone();\n\t\t\t hostCSGs.push(store);\n\t\t }\n\t };\n };\n \n const prepareCSG = guestGeometry => {\n\t if (host && guestGeometry && guestGeometry.morph) {\n\t if (hostCSGs.length == 0) {\n\t \t host.forEachGlyph(prepareCSGForGlyphs());\n\t }\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if ((hostCSGs.length > 0) && guestCSG) {\n\t\tconst glyphset = new (require('./primitives/glyphset').Glyphset)();\n\t\tfor (let i = 0; i < hostCSGs.length; i++) {\n\t\t\tconst hostCSG = hostCSGs[i];\n\t\t const intersect = hostCSG.csg.intersect(guestCSG);\n\t\t const mesh = intersect.toMesh();\n\t\t if (mesh && mesh.geometry && (mesh.geometry.vertices.length > 0)) {\n\t\t \tif (hostCSG.material) {\n\t\t \t\tmesh.material = hostCSG.material;\n\t\t \t\tmesh.material.side = THREE.DoubleSide;\n\t\t \t\tmesh.material.clippingPlanes = null;\n\t\t \t}\n\t\t\t const glyph = glyphset.addMeshAsGlyph(mesh, i+1);\n\t\t\t glyph.setLabel(hostCSG.label);\n\t\t }\n\t\t}\n\t const newCSG = new GlyphsetCSG(glyphset);\t\n\t return newCSG;\n\t }\n\n\t return undefined;\n }\n \n};\n\nexports.GlyphsetCSG = GlyphsetCSG;\n"],"sourceRoot":""}
|