1
0
mirror of https://github.com/troisjs/trois.git synced 2024-11-27 22:12:01 +08:00
trois/build/trois.module.cdn.min.js.map
Kevin Levron 090e9b78a1 0.1.14
2021-03-13 19:34:34 +01:00

1 line
146 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"trois.module.cdn.min.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Object3D.js","../src/core/Group.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/HemisphereLight.js","../src/lights/PointLight.js","../src/lights/RectAreaLight.js","../src/lights/SpotLight.js","../src/materials/Material.js","../src/materials/BasicMaterial.js","../src/materials/LambertMaterial.js","../src/materials/MatcapMaterial.js","../src/materials/PhongMaterial.js","../src/materials/StandardMaterial.js","../src/materials/PhysicalMaterial.js","../src/materials/ShaderMaterial.js","../src/materials/SubsurfaceScatteringShader.js","../src/materials/SubSurfaceMaterial.js","../src/materials/ToonMaterial.js","../src/materials/Texture.js","../src/materials/CubeTexture.js","../src/meshes/Mesh.js","../src/meshes/Box.js","../src/meshes/Circle.js","../src/meshes/Cone.js","../src/meshes/Cylinder.js","../src/meshes/Dodecahedron.js","../src/meshes/Icosahedron.js","../src/meshes/Lathe.js","../src/meshes/Octahedron.js","../src/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/models/GLTF.js","../src/models/FBX.js","../src/effects/EffectComposer.js","../src/effects/EffectPass.js","../src/effects/RenderPass.js","../src/effects/BokehPass.js","../src/effects/FilmPass.js","../src/effects/FXAAPass.js","../src/effects/HalftonePass.js","../src/effects/SMAAPass.js","../src/shaders/default.js","../src/shaders/TiltShift.js","../src/effects/TiltShiftPass.js","../src/effects/UnrealBloomPass.js","../src/shaders/ZoomBlur.js","../src/effects/ZoomBlurPass.js","../src/plugin.js"],"sourcesContent":["import {\n Plane,\n Raycaster,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\n/**\n * Three.js helper\n */\nexport default function useThree() {\n // default conf\n const conf = {\n canvas: null,\n antialias: true,\n alpha: false,\n autoClear: true,\n orbit_ctrl: false,\n mouse_move: false,\n mouse_raycast: false,\n mouse_over: false,\n click: false,\n resize: true,\n width: 0,\n height: 0,\n };\n\n // size\n const size = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n };\n\n // handlers\n const afterInitCallbacks = [];\n let afterResizeCallbacks = [];\n let beforeRenderCallbacks = [];\n\n // mouse tracking\n const mouse = new Vector2();\n const mouseV3 = new Vector3();\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\n const raycaster = new Raycaster();\n\n // raycast objects\n const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n materials: {},\n scene: null,\n size,\n mouse, mouseV3,\n init,\n dispose,\n render,\n renderC,\n setSize,\n onAfterInit,\n onAfterResize, offAfterResize,\n onBeforeRender, offBeforeRender,\n addIntersectObject, removeIntersectObject,\n };\n\n /**\n * init three\n */\n function init(params) {\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n conf[key] = value;\n });\n }\n\n if (!obj.scene) {\n console.error('Missing Scene');\n return;\n }\n\n if (!obj.camera) {\n console.error('Missing Camera');\n return;\n }\n\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\n obj.renderer.autoClear = conf.autoClear;\n\n if (conf.orbit_ctrl) {\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\n if (conf.orbit_ctrl instanceof Object) {\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\n obj.orbitCtrl[key] = value;\n });\n }\n }\n\n if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width | 300, conf.height | 150);\n }\n\n conf.mouse_move = conf.mouse_move || conf.mouse_over;\n if (conf.mouse_move) {\n if (conf.mouse_move === 'body') {\n obj.mouse_move_element = document.body;\n } else {\n obj.mouse_move_element = obj.renderer.domElement;\n }\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\n }\n\n if (conf.click) {\n obj.renderer.domElement.addEventListener('click', onClick);\n }\n\n afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n /**\n * add after init callback\n */\n function onAfterInit(callback) {\n afterInitCallbacks.push(callback);\n }\n\n /**\n * add after resize callback\n */\n function onAfterResize(callback) {\n afterResizeCallbacks.push(callback);\n }\n\n /**\n * remove after resize callback\n */\n function offAfterResize(callback) {\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(callback) {\n beforeRenderCallbacks.push(callback);\n }\n\n /**\n * remove before render callback\n */\n function offBeforeRender(callback) {\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\n }\n\n /**\n * default render\n */\n function render() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.renderer.render(obj.scene, obj.camera);\n }\n\n /**\n * composer render\n */\n function renderC() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.composer.render();\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o);\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o) {\n const i = intersectObjects.indexOf(o);\n if (i !== -1) {\n intersectObjects.splice(i, 1);\n }\n }\n\n /**\n * remove listeners\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.mouse_move_element) {\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\n }\n obj.renderer.domElement.removeEventListener('click', onClick);\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n this.renderer.dispose();\n }\n\n /**\n */\n function updateMouse(e) {\n const rect = e.target.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1;\n }\n\n /**\n * click listener\n */\n function onClick(e) {\n updateMouse(e);\n raycaster.setFromCamera(mouse, obj.camera);\n const objects = raycaster.intersectObjects(intersectObjects);\n for (let i = 0; i < objects.length; i++) {\n const o = objects[i].object;\n if (o.onClick) o.onClick(e);\n }\n }\n\n /**\n * mousemove listener\n */\n function onMousemove(e) {\n updateMouse(e);\n onMousechange(e);\n }\n\n /**\n * mouseleave listener\n */\n function onMouseleave(e) {\n // mouse.x = 0;\n // mouse.y = 0;\n onMousechange(e);\n }\n\n /**\n * mouse change\n */\n function onMousechange(e) {\n if (conf.mouse_over || conf.mouse_raycast) {\n raycaster.setFromCamera(mouse, obj.camera);\n\n if (conf.mouse_raycast) {\n // get mouse 3d position\n obj.camera.getWorldDirection(mousePlane.normal);\n mousePlane.normal.normalize();\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\n }\n\n if (conf.mouse_over) {\n const onObjects = raycaster.intersectObjects(intersectObjects);\n const offObjects = [...intersectObjects];\n for (let i = 0; i < onObjects.length; i++) {\n const o = onObjects[i].object;\n if (!o.hover && o.onHover) {\n o.hover = true;\n o.onHover(true);\n }\n offObjects.splice(offObjects.indexOf(o), 1);\n }\n for (let i = 0; i < offObjects.length; i++) {\n const o = offObjects[i];\n if (o.hover && o.onHover) {\n o.hover = false;\n o.onHover(false);\n }\n }\n }\n }\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (conf.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight);\n } else {\n const elt = obj.renderer.domElement.parentNode;\n setSize(elt.clientWidth, elt.clientHeight);\n }\n afterResizeCallbacks.forEach(c => c());\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width, height) {\n size.width = width;\n size.height = height;\n size.ratio = width / height;\n\n obj.renderer.setSize(width, height, false);\n obj.camera.aspect = size.ratio;\n obj.camera.updateProjectionMatrix();\n\n if (obj.composer) {\n obj.composer.setSize(width, height);\n }\n\n if (obj.camera.type === 'OrthographicCamera') {\n size.wWidth = obj.camera.right - obj.camera.left;\n size.wHeight = obj.camera.top - obj.camera.bottom;\n } else {\n const wsize = getCameraSize();\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const vFOV = (obj.camera.fov * Math.PI) / 180;\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\n const w = h * obj.camera.aspect;\n return [w, h];\n }\n\n return obj;\n}\n","import { h } from 'vue';\nimport useThree from './useThree';\n\nexport default {\n name: 'Renderer',\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n mouseMove: { type: [Boolean, String], default: false },\n mouseRaycast: { type: Boolean, default: false },\n mouseOver: { type: Boolean, default: false },\n click: { type: Boolean, default: false },\n orbitCtrl: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n },\n setup() {\n return {\n three: useThree(),\n raf: true,\n onMountedCallbacks: [],\n };\n },\n provide() {\n return {\n three: this.three,\n // renderer: this.three.renderer,\n rendererComponent: this,\n };\n },\n mounted() {\n const params = {\n canvas: this.$el,\n antialias: this.antialias,\n alpha: this.alpha,\n autoClear: this.autoClear,\n orbit_ctrl: this.orbitCtrl,\n mouse_move: this.mouseMove,\n mouse_raycast: this.mouseRaycast,\n mouse_over: this.mouseOver,\n click: this.click,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.renderer = this.three.renderer;\n this.renderer.shadowMap.enabled = this.shadow;\n if (this.three.composer) this.animateC();\n else this.animate();\n };\n\n this.onMountedCallbacks.forEach(c => c());\n },\n beforeUnmount() {\n this.raf = false;\n this.three.dispose();\n },\n methods: {\n onMounted(callback) {\n this.onMountedCallbacks.push(callback);\n },\n onBeforeRender(callback) {\n this.three.onBeforeRender(callback);\n },\n onAfterResize(callback) {\n this.three.onAfterResize(callback);\n },\n animate() {\n if (this.raf) requestAnimationFrame(this.animate);\n this.three.render();\n },\n animateC() {\n if (this.raf) requestAnimationFrame(this.animateC);\n this.three.renderC();\n },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n __hmrId: 'Renderer',\n};\n","import { toRef, watch } from 'vue';\n\nexport function setFromProp(o, prop) {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value;\n });\n }\n};\n\nexport function bindProps(src, props, dst) {\n props.forEach(prop => {\n bindProp(src, prop, dst);\n });\n};\n\nexport function bindProp(src, srcProp, dst, dstProp) {\n if (!dstProp) dstProp = srcProp;\n const ref = toRef(src, srcProp);\n if (ref.value instanceof Object) {\n setFromProp(dst[dstProp], ref.value);\n watch(ref, (value) => { setFromProp(dst[dstProp], value); }, { deep: true });\n } else {\n if (ref.value) dst[dstProp] = src[srcProp];\n watch(ref, (value) => { dst[dstProp] = value; });\n }\n};\n\nexport function propsValues(props, exclude) {\n const values = {};\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || (exclude && !exclude.includes(key))) {\n values[key] = value;\n }\n });\n return values;\n};\n\nexport function lerp(value1, value2, amount) {\n amount = amount < 0 ? 0 : amount;\n amount = amount > 1 ? 1 : amount;\n return value1 + (value2 - value1) * amount;\n};\n\nexport function lerpv2(v1, v2, amount) {\n v1.x = lerp(v1.x, v2.x, amount);\n v1.y = lerp(v1.y, v2.y, amount);\n};\n\nexport function lerpv3(v1, v2, amount) {\n v1.x = lerp(v1.x, v2.x, amount);\n v1.y = lerp(v1.y, v2.y, amount);\n v1.z = lerp(v1.z, v2.z, amount);\n};\n\nexport function limit(val, min, max) {\n return val < min ? min : (val > max ? max : val);\n};\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';\n\nexport function getMatcapUrl(hash, format = 1024) {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`;\n return `${MATCAP_ROOT}/${format}/${fileName}`;\n};\n\nfunction getMatcapFormatString(format) {\n switch (format) {\n case 64:\n return '-64px';\n case 128:\n return '-128px';\n case 256:\n return '-256px';\n case 512:\n return '-512px';\n default:\n return '';\n }\n}\n\n// shader defaults\nexport const defaultVertexShader = `\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\nexport const defaultFragmentShader = `\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}`;\n","import { OrthographicCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'OrthographicCamera',\n inject: ['three'],\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: Object, default: { x: 0, y: 0, z: 0 } },\n },\n created() {\n this.camera = new OrthographicCamera(this.left, this.right, this.top, this.bottom, this.near, this.far);\n bindProp(this, 'position', this.camera);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n watch(() => this[p], () => {\n this.camera[p] = this[p];\n this.camera.updateProjectionMatrix();\n });\n });\n\n this.three.camera = this.camera;\n },\n render() { return []; },\n __hmrId: 'OrthographicCamera',\n};\n","import { PerspectiveCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'PerspectiveCamera',\n inject: ['three'],\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: Object, default: { x: 0, y: 0, z: 0 } },\n lookAt: { type: Object, default: null },\n },\n created() {\n this.camera = new PerspectiveCamera(this.fov, this.aspect, this.near, this.far);\n bindProp(this, 'position', this.camera);\n\n if (this.lookAt) this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z);\n watch(() => this.lookAt, (v) => { this.camera.lookAt(v.x, v.y, v.z); }, { deep: true });\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n watch(() => this[p], () => {\n this.camera[p] = this[p];\n this.camera.updateProjectionMatrix();\n });\n });\n\n this.three.camera = this.camera;\n },\n render() { return []; },\n __hmrId: 'PerspectiveCamera',\n};\n","import { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'Object3D',\n inject: ['three', 'scene', 'rendererComponent'],\n props: {\n position: { type: Object, default: { x: 0, y: 0, z: 0 } },\n rotation: { type: Object, default: { x: 0, y: 0, z: 0 } },\n scale: { type: Object, default: { x: 1, y: 1, z: 1 } },\n lookAt: { type: Object, default: null },\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this._parent) this._parent.remove(this.o3d);\n },\n methods: {\n initObject3D(o3d) {\n this.o3d = o3d;\n\n bindProp(this, 'position', this.o3d);\n bindProp(this, 'rotation', this.o3d);\n bindProp(this, 'scale', this.o3d);\n\n // TODO : fix lookat.x\n if (this.lookAt) this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z);\n watch(() => this.lookAt, (v) => { this.o3d.lookAt(v.x, v.y, v.z); }, { deep: true });\n\n let parent = this.$parent;\n while (parent) {\n if (parent.add) {\n parent.add(this.o3d);\n this._parent = parent;\n break;\n }\n parent = parent.$parent;\n }\n if (!this._parent) console.error('Missing parent (Scene, Group...)');\n },\n add(o) { this.o3d.add(o); },\n remove(o) { this.o3d.remove(o); },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'Object3D',\n};\n","import { Group } from 'three';\nimport Object3D from './Object3D.js';\n\nexport default {\n name: 'Group',\n extends: Object3D,\n created() {\n this.group = new Group();\n this.initObject3D(this.group);\n },\n __hmrId: 'Group',\n};\n","import { Scene, Color } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n name: 'Scene',\n inject: ['three'],\n props: {\n id: String,\n background: [String, Number],\n },\n setup(props) {\n const scene = new Scene();\n if (props.background) scene.background = new Color(props.background);\n watch(() => props.background, (value) => { scene.background.set(value); });\n return { scene };\n },\n provide() {\n return {\n scene: this.scene,\n };\n },\n mounted() {\n if (!this.three.scene) {\n this.three.scene = this.scene;\n }\n },\n methods: {\n add(o) { this.scene.add(o); },\n remove(o) { this.scene.remove(o); },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'Scene',\n};\n","import { watch } from 'vue';\n\nexport default {\n inject: ['mesh'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh');\n }\n\n this.watchProps = [];\n Object.entries(this.$props).forEach(e => this.watchProps.push(e[0]));\n\n this.createGeometry();\n this.rotateGeometry();\n this.mesh.setGeometry(this.geometry);\n\n this.addWatchers();\n },\n unmounted() {\n this.geometry.dispose();\n },\n methods: {\n addWatchers() {\n this.watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n rotateGeometry() {\n if (this.rotateX) this.geometry.rotateX(this.rotateX);\n if (this.rotateY) this.geometry.rotateY(this.rotateY);\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ);\n },\n refreshGeometry() {\n const oldGeo = this.geometry;\n this.createGeometry();\n this.rotateGeometry();\n this.mesh.setGeometry(this.geometry);\n oldGeo.dispose();\n },\n },\n render() { return []; },\n};\n","import { BoxGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n methods: {\n createGeometry() {\n let w = this.width, h = this.height, d = this.depth;\n if (this.size) {\n w = this.size; h = this.size; d = this.size;\n }\n this.geometry = new BoxGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\n },\n },\n};\n","import { CircleGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n};\n","import { TetrahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { watch } from 'vue';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp, setFromProp } from '../tools.js';\n\nexport default {\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object, default: { x: 512, y: 512 } },\n shadowCamera: { type: Object, default: {} },\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this.light.target) this.$parent.remove(this.light.target);\n },\n methods: {\n initLight() {\n if (this.light.target) {\n bindProp(this, 'target', this.light.target, 'position');\n }\n\n if (this.light.shadow) {\n this.light.castShadow = this.castShadow;\n setFromProp(this.light.shadow.mapSize, this.shadowMapSize);\n setFromProp(this.light.shadow.camera, this.shadowCamera);\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n watch(() => this[p], () => {\n if (p === 'color') {\n this.light.color.set(this.color);\n } else {\n this.light[p] = this[p];\n }\n });\n });\n\n this.initObject3D(this.light);\n if (this.light.target) this.$parent.add(this.light.target);\n },\n },\n __hmrId: 'Light',\n};\n","import { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'AmbientLight',\n};\n","import { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'DirectionalLight',\n};\n","import { HemisphereLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n this.light = new HemisphereLight(this.color, this.groundColor, this.intensity);\n watch(() => this.groundColor, (value) => { this.light.groundColor.set(value); });\n this.initLight();\n },\n __hmrId: 'HemisphereLight',\n};\n","import { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n distance: {\n type: Number,\n default: 0,\n },\n decay: {\n type: Number,\n default: 1,\n },\n },\n created() {\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\n this.initLight();\n },\n __hmrId: 'PointLight',\n};\n","import { RectAreaLight } from 'three';\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init();\n this.light = new RectAreaLight(this.color, this.intensity, this.width, this.height);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], () => {\n this.light[p] = this[p];\n });\n });\n\n if (this.helper) {\n this.lightHelper = new RectAreaLightHelper(this.light);\n this.$parent.add(this.lightHelper);\n }\n\n this.initLight();\n },\n unmounted() {\n if (this.lightHelper) this.$parent.remove(this.lightHelper);\n },\n __hmrId: 'RectAreaLight',\n};\n","import { SpotLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\n target: Object,\n },\n created() {\n this.light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay);\n ['angle', 'decay', 'distance', 'penumbra'].forEach(p => {\n watch(() => this[p], () => {\n this.light[p] = this[p];\n });\n });\n this.initLight();\n },\n __hmrId: 'SpotLight',\n};\n","import { watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default {\n inject: ['three', 'mesh'],\n props: {\n color: { type: [String, Number], default: '#ffffff' },\n depthTest: { type: Boolean, default: true },\n depthWrite: { type: Boolean, default: true },\n fog: { type: Boolean, default: true },\n opacity: { type: Number, default: 1 },\n side: { type: Number, default: FrontSide },\n transparent: Boolean,\n vertexColors: Boolean,\n },\n provide() {\n return {\n material: this,\n };\n },\n created() {\n this.createMaterial();\n this.mesh.setMaterial(this.material);\n\n this._addWatchers();\n if (this.addWatchers) this.addWatchers();\n },\n unmounted() {\n this.material.dispose();\n },\n methods: {\n setProp(key, value, needsUpdate = false) {\n this.material[key] = value;\n this.material.needsUpdate = needsUpdate;\n },\n setTexture(texture, key = 'map') {\n this.setProp(key, texture, true);\n },\n _addWatchers() {\n ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(p => {\n watch(() => this[p], () => {\n if (p === 'color') {\n this.material.color.set(this.color);\n } else {\n this.material[p] = this[p];\n }\n });\n });\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'Material',\n};\n\nexport const wireframeProps = {\n wireframe: { type: Boolean, default: false },\n // not needed for WebGL\n // wireframeLinecap: { type: String, default: 'round' },\n // wireframeLinejoin: { type: String, default: 'round' },\n wireframeLinewidth: { type: Number, default: 1 }, // not really useful\n};\n","import { MeshBasicMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshBasicMaterial(propsValues(this.$props));\n },\n addWatchers() {\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'BasicMaterial',\n};\n","import { MeshLambertMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshLambertMaterial(propsValues(this.$props));\n },\n addWatchers() {\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'LambertMaterial',\n};\n","import { MeshMatcapMaterial, TextureLoader } from 'three';\n// import { watch } from 'vue';\nimport { propsValues, getMatcapUrl } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n src: String,\n name: String,\n flatShading: Boolean,\n },\n methods: {\n createMaterial() {\n const src = this.name ? getMatcapUrl(this.name) : this.src;\n const opts = propsValues(this.$props, ['src', 'name']);\n opts.matcap = new TextureLoader().load(src);\n this.material = new MeshMatcapMaterial(opts);\n },\n addWatchers() {\n // TODO\n },\n },\n __hmrId: 'MatcapMaterial',\n};\n","import { MeshPhongMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n reflectivity: { type: Number, default: 1 },\n shininess: { type: Number, default: 30 },\n specular: { type: [String, Number], default: 0x111111 },\n flatShading: Boolean,\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshPhongMaterial(propsValues(this.$props));\n },\n addWatchers() {\n // TODO : handle flatShading ?\n ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(p => {\n watch(() => this[p], (value) => {\n if (p === 'emissive' || p === 'specular') {\n this.material[p].set(value);\n } else {\n this.material[p] = value;\n }\n });\n });\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'PhongMaterial',\n};\n","import { MeshStandardMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProp, bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nconst props = {\n aoMapIntensity: { type: Number, default: 1 },\n bumpScale: { type: Number, default: 1 },\n displacementBias: { type: Number, default: 0 },\n displacementScale: { type: Number, default: 1 },\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n envMapIntensity: { type: Number, default: 1 },\n lightMapIntensity: { type: Number, default: 1 },\n metalness: { type: Number, default: 0 },\n normalScale: { type: Object, default: { x: 1, y: 1 } },\n roughness: { type: Number, default: 1 },\n refractionRatio: { type: Number, default: 0.98 },\n flatShading: Boolean,\n};\n\nexport default {\n extends: Material,\n props: {\n ...props,\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshStandardMaterial(propsValues(this.$props, ['normalScale']));\n },\n addWatchers() {\n // TODO : use setProp, handle flatShading ?\n Object.keys(props).forEach(p => {\n if (p === 'normalScale') return;\n watch(() => this[p], (value) => {\n if (p === 'emissive') {\n this.material[p].set(value);\n } else {\n this.material[p] = value;\n }\n });\n });\n bindProp(this, 'normalScale', this.material);\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'StandardMaterial',\n};\n","import { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport StandardMaterial from './StandardMaterial';\n\nexport default {\n extends: StandardMaterial,\n props: {\n flatShading: Boolean,\n },\n methods: {\n createMaterial() {\n this.material = new MeshPhysicalMaterial(propsValues(this.$props));\n },\n addWatchers() {\n // TODO\n },\n },\n __hmrId: 'PhysicalMaterial',\n};\n","import { ShaderMaterial } from 'three';\nimport { watch } from 'vue';\nimport { propsValues, defaultFragmentShader, defaultVertexShader } from '../tools.js';\n\nexport default {\n inject: ['three', 'mesh'],\n props: {\n uniforms: { type: Object, default: () => { return {}; } },\n vertexShader: { type: String, default: defaultVertexShader },\n fragmentShader: { type: String, default: defaultFragmentShader },\n },\n created() {\n this.createMaterial();\n ['vertexShader', 'fragmentShader'].forEach(p => {\n watch(() => this[p], () => {\n // recreate material if we change either shader\n this.material.dispose();\n this.createMaterial();\n });\n });\n },\n unmounted() {\n this.material.dispose();\n },\n methods: {\n createMaterial() {\n this.material = new ShaderMaterial(propsValues(this.$props));\n this.mesh.setMaterial(this.material);\n },\n },\n render() {\n return [];\n },\n __hmrId: 'ShaderMaterial',\n};\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three';\n\nfunction replaceAll(string, find, replace) {\n return string.split(find).join(replace);\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'));\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'));\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include <lights_fragment_begin>',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\n\nexport default {\n inject: ['three', 'mesh'],\n props: {\n color: { type: String, default: '#ffffff' },\n thicknessColor: { type: String, default: '#ffffff' },\n thicknessDistortion: { type: Number, default: 0.4 },\n thicknessAmbient: { type: Number, default: 0.01 },\n thicknessAttenuation: { type: Number, default: 0.7 },\n thicknessPower: { type: Number, default: 2 },\n thicknessScale: { type: Number, default: 4 },\n transparent: { type: Boolean, default: false },\n opacity: { type: Number, default: 1 },\n vertexColors: { type: Boolean, default: false },\n },\n created() {\n this.createMaterial();\n this.mesh.setMaterial(this.material);\n },\n unmounted() {\n this.material.dispose();\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader;\n const uniforms = UniformsUtils.clone(params.uniforms);\n\n Object.entries(this.$props).forEach(([key, value]) => {\n let _key = key, _value = value;\n if (['color', 'thicknessColor'].includes(key)) {\n if (key === 'color') _key = 'diffuse';\n _value = new Color(value);\n }\n if (!['transparent', 'vertexColors'].includes(key)) {\n uniforms[_key].value = _value;\n }\n });\n\n this.material = new TShaderMaterial({\n ...params,\n uniforms,\n lights: true,\n transparent: this.transparent,\n vertexColors: this.vertexColors,\n });\n },\n },\n render() {\n return [];\n },\n __hmrId: 'SubSurfaceMaterial',\n};\n","import { MeshToonMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshToonMaterial(propsValues(this.$props));\n },\n addWatchers() {\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'ToonMaterial',\n};\n","import { ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, TextureLoader, UVMapping } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n id: { type: String, default: 'map' },\n src: String,\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n mapping: { type: Number, default: UVMapping },\n wrapS: { type: Number, default: ClampToEdgeWrapping },\n wrapT: { type: Number, default: ClampToEdgeWrapping },\n magFilter: { type: Number, default: LinearFilter },\n minFilter: { type: Number, default: LinearMipmapLinearFilter },\n repeat: { type: Object, default: { x: 1, y: 1 } },\n rotation: { type: Number, default: 0 },\n center: { type: Object, default: { x: 0, y: 0 } },\n },\n created() {\n this.refreshTexture();\n watch(() => this.src, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n const wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center'];\n wathProps.forEach(prop => {\n bindProp(this, prop, this.texture);\n });\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() { return []; },\n};\n","import { CubeTextureLoader, CubeRefractionMapping } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n path: String,\n urls: {\n type: Array,\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'envMap' },\n refraction: Boolean,\n // todo: remove ?\n refractionRatio: { type: Number, default: 0.98 },\n },\n created() {\n this.refreshTexture();\n watch(() => this.path, this.refreshTexture);\n watch(() => this.urls, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n if (this.refraction) {\n this.texture.mapping = CubeRefractionMapping;\n this.material.setProp('refractionRatio', this.refractionRatio);\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { watch } from 'vue';\nimport { Mesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n name: 'Mesh',\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n onHover: Function,\n onClick: Function,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n provide() {\n return {\n mesh: this,\n };\n },\n mounted() {\n if (!this.mesh && !this.loading) this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new Mesh(this.geometry, this.material);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n if (this.onHover) {\n this.mesh.onHover = (over) => { this.onHover({ component: this, over }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n if (this.onClick) {\n this.mesh.onClick = (e) => { this.onClick({ component: this, event: e }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n this.initObject3D(this.mesh);\n },\n setGeometry(geometry) {\n this.geometry = geometry;\n if (this.mesh) this.mesh.geometry = geometry;\n },\n setMaterial(material) {\n this.material = material;\n if (this.mesh) this.mesh.material = material;\n },\n refreshGeometry() {\n const oldGeo = this.geometry;\n this.createGeometry();\n this.mesh.geometry = this.geometry;\n oldGeo.dispose();\n },\n },\n unmounted() {\n if (this.mesh) {\n this.three.removeIntersectObject(this.mesh);\n }\n // for predefined mesh (geometry and material are not unmounted)\n if (this.geometry) this.geometry.dispose();\n if (this.material) this.material.dispose();\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n if (this.size) {\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\n } else {\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\n }\n },\n },\n __hmrId: 'Box',\n};\n","import { CircleBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Circle',\n};\n","import { ConeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cone',\n};\n","import { CylinderBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cylinder',\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Dodecahedron',\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Icosahedron',\n};\n","import { LatheBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['points', 'segments', 'phiStart', 'phiLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n __hmrId: 'Lathe',\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Octahedron',\n};\n","import { PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Plane',\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['vertices', 'indices', 'radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n __hmrId: 'Polyhedron',\n};\n","import { RingBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Ring',\n};\n","import { SphereBufferGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: Number,\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n watch: {\n radius() { this.refreshGeometry(); },\n widthSegments() { this.refreshGeometry(); },\n heightSegments() { this.refreshGeometry(); },\n },\n created() {\n this.createGeometry();\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Sphere',\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n data() {\n return {\n loading: true,\n };\n },\n created() {\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ];\n watchProps.forEach(p => {\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry();\n });\n });\n\n const loader = new FontLoader();\n loader.load(this.fontSrc, (font) => {\n this.loading = false;\n this.font = font;\n this.createGeometry();\n this.initMesh();\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n points: Array,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n const watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], (v) => {\n this.refreshGeometry();\n });\n });\n watch(() => this.points, () => {\n updateTubeGeometryPoints(this.geometry, this.points);\n });\n },\n methods: {\n createGeometry() {\n let curve;\n if (this.points) {\n curve = new CatmullRomCurve3(this.points);\n } else if (this.path) {\n curve = this.path;\n } else {\n console.error('Missing path curve or points.');\n }\n this.geometry = new TubeGeometry(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n // update curve points (without using prop, faster)\n updateCurve(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n __hmrId: 'Tube',\n};\n\nfunction updateTubeGeometryPoints(tube, points) {\n const curve = new CatmullRomCurve3(points);\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters;\n const frames = curve.computeFrenetFrames(tubularSegments, closed);\n tube.tangents = frames.tangents;\n tube.normals = frames.normals;\n tube.binormals = frames.binormals;\n tube.parameters.path = curve;\n\n const pArray = tube.attributes.position.array;\n const nArray = tube.attributes.normal.array;\n const normal = new Vector3();\n let P;\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i);\n }\n updateSegment(tubularSegments);\n\n tube.attributes.position.needsUpdate = true;\n tube.attributes.normal.needsUpdate = true;\n\n function updateSegment(i) {\n P = curve.getPointAt(i / tubularSegments, P);\n const N = frames.normals[i];\n const B = frames.binormals[i];\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2;\n const sin = Math.sin(v);\n const cos = -Math.cos(v);\n normal.x = (cos * N.x + sin * B.x);\n normal.y = (cos * N.y + sin * B.y);\n normal.z = (cos * N.z + sin * B.z);\n normal.normalize();\n const index = (i * (radialSegments + 1) + j) * 3;\n nArray[index] = normal.x;\n nArray[index + 1] = normal.y;\n nArray[index + 2] = normal.z;\n pArray[index] = P.x + radius * normal.x;\n pArray[index + 1] = P.y + radius * normal.y;\n pArray[index + 2] = P.z + radius * normal.z;\n }\n }\n}\n","import {\n BackSide,\n CubeCamera,\n FrontSide,\n LinearMipmapLinearFilter,\n Mesh as TMesh,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initGem();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.meshBack) this.$parent.remove(this.meshBack);\n if (this.materialBack) this.materialBack.dispose();\n },\n methods: {\n initGem() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.side = FrontSide;\n this.material.envMap = cubeRT.texture;\n this.material.envMapIntensity = 10;\n this.material.metalness = 0;\n this.material.roughness = 0;\n this.material.opacity = 0.75;\n this.material.transparent = true;\n this.material.premultipliedAlpha = true;\n this.material.needsUpdate = true;\n\n this.materialBack = this.material.clone();\n this.materialBack.side = BackSide;\n this.materialBack.envMapIntensity = 5;\n this.materialBack.metalness = 1;\n this.materialBack.roughness = 0;\n this.materialBack.opacity = 0.5;\n\n this.meshBack = new TMesh(this.geometry, this.materialBack);\n\n bindProp(this, 'position', this.meshBack);\n bindProp(this, 'rotation', this.meshBack);\n bindProp(this, 'scale', this.meshBack);\n this.$parent.add(this.meshBack);\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.meshBack.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n this.meshBack.visible = true;\n },\n },\n __hmrId: 'Gem',\n};\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: String,\n width: Number,\n height: Number,\n keepSize: Boolean,\n },\n created() {\n this.createGeometry();\n this.createMaterial();\n this.initMesh();\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], this.resize);\n });\n\n if (this.keepSize) this.three.onAfterResize(this.resize);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n },\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded);\n },\n refreshTexture() {\n if (this.texture) this.texture.dispose();\n this.material.map = this.loadTexture();\n this.material.needsUpdate = true;\n },\n onLoaded(texture) {\n this.texture = texture;\n this.resize();\n this.$emit('loaded');\n },\n resize() {\n if (!this.texture) return;\n const screen = this.three.size;\n const iW = this.texture.image.width;\n const iH = this.texture.image.height;\n const iRatio = iW / iH;\n let w, h;\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width;\n h = this.height * screen.wHeight / screen.height;\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width;\n h = w / iRatio;\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height;\n w = h * iRatio;\n }\n this.mesh.scale.x = w;\n this.mesh.scale.y = h;\n },\n },\n __hmrId: 'Image',\n};\n","import { watch } from 'vue';\nimport { InstancedMesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n count: Number,\n },\n provide() {\n return {\n mesh: this,\n };\n },\n beforeMount() {\n if (!this.$slots.default) {\n console.error('Missing Geometry');\n }\n },\n created() {\n this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n this.initObject3D(this.mesh);\n },\n setGeometry(geometry) {\n this.geometry = geometry;\n if (this.mesh) this.mesh.geometry = geometry;\n },\n setMaterial(material) {\n this.material = material;\n if (this.mesh) this.mesh.material = material;\n },\n },\n __hmrId: 'InstancedMesh',\n};\n","import {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'MirrorMesh',\n};\n","import {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n refractionRatio: { type: Number, default: 0.98 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.refractionRatio = this.refractionRatio;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'RefractionMesh',\n};\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: String,\n },\n data() {\n return {\n loading: true,\n };\n },\n created() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded);\n this.material = new SpriteMaterial({ map: this.texture });\n this.sprite = new Sprite(this.material);\n this.geometry = this.sprite.geometry;\n this.initObject3D(this.sprite);\n },\n unmounted() {\n this.texture.dispose();\n this.material.dispose();\n },\n methods: {\n onLoaded() {\n this.loading = false;\n this.updateUV();\n this.$emit('loaded');\n },\n updateUV() {\n this.iWidth = this.texture.image.width;\n this.iHeight = this.texture.image.height;\n this.iRatio = this.iWidth / this.iHeight;\n\n let x = 0.5, y = 0.5;\n if (this.iRatio > 1) {\n y = 0.5 / this.iRatio;\n } else {\n x = 0.5 / this.iRatio;\n }\n\n const positions = this.geometry.attributes.position.array;\n positions[0] = -x; positions[1] = -y;\n positions[5] = x; positions[6] = -y;\n positions[10] = x; positions[11] = y;\n positions[15] = -x; positions[16] = y;\n this.geometry.attributes.position.needsUpdate = true;\n },\n },\n __hmrId: 'Sprite',\n};\n","import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\r\n props: {\r\n src: String,\r\n },\r\n created() {\r\n const loader = new GLTFLoader();\r\n loader.load(this.src, (gltf) => {\r\n this.$emit('loaded', gltf);\r\n this.initObject3D(gltf.scene);\r\n });\r\n },\r\n};\r\n","import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\r\n props: {\r\n src: String,\r\n },\r\n created() {\r\n const loader = new FBXLoader();\r\n loader.load(this.src, (fbx) => {\r\n this.$emit('loaded', fbx);\r\n this.initObject3D(fbx);\r\n });\r\n },\r\n};\r\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default {\n setup() {\n return {\n passes: [],\n };\n },\n inject: ['three'],\n provide() {\n return {\n passes: this.passes,\n };\n },\n mounted() {\n this.three.onAfterInit(() => {\n this.composer = new EffectComposer(this.three.renderer);\n this.three.renderer.autoClear = false;\n this.passes.forEach(pass => {\n this.composer.addPass(pass);\n });\n this.three.composer = this.composer;\n\n this.resize();\n this.three.onAfterResize(this.resize);\n });\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n this.composer.setSize(this.three.size.width, this.three.size.height);\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'EffectComposer',\n};\n","export default {\n inject: ['three', 'passes'],\n beforeMount() {\n if (!this.passes) {\n console.error('Missing parent EffectComposer');\n }\n },\n unmounted() {\n if (this.pass.dispose) this.pass.dispose();\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n};\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const pass = new RenderPass(this.three.scene, this.three.camera);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'RenderPass',\n};\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n focus: {\n type: Number,\n default: 1,\n },\n aperture: {\n type: Number,\n default: 0.025,\n },\n maxblur: {\n type: Number,\n default: 0.01,\n },\n },\n watch: {\n focus() { this.pass.uniforms.focus.value = this.focus; },\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\n },\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.three.size.width,\n height: this.three.size.height,\n };\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'BokehPass',\n};\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n noiseIntensity: {\n type: Number,\n default: 0.5,\n },\n scanlinesIntensity: {\n type: Number,\n default: 0.05,\n },\n scanlinesCount: {\n type: Number,\n default: 4096,\n },\n grayscale: {\n type: Number,\n default: 0,\n },\n },\n watch: {\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\n },\n mounted() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'FilmPass',\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.passes.push(pass);\n this.pass = pass;\n\n // resize will be called in three init\n this.three.onAfterResize(this.resize);\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n const { resolution } = this.pass.material.uniforms;\n resolution.value.x = 1 / this.three.size.width;\n resolution.value.y = 1 / this.three.size.height;\n },\n },\n __hmrId: 'FXAAPass',\n};\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n },\n mounted() {\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\n\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\n pass.uniforms[p].value = this[p];\n watch(() => this[p], () => {\n pass.uniforms[p].value = this[p];\n });\n });\n\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'HalftonePass',\n};\n","import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n // three size is not set yet, but this pass will be resized by effect composer\n const pass = new SMAAPass(this.three.size.width, this.three.size.height);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'SMAAPass',\n};\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object, default: { x: 0, y: 100 } },\n end: { type: Object, default: { x: 10, y: 100 } },\n },\n mounted() {\n this.pass = new ShaderPass(TiltShift);\n this.passes.push(this.pass);\n\n this.pass1 = new ShaderPass(TiltShift);\n this.passes.push(this.pass1);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n const uniforms1 = this.uniforms1 = this.pass1.uniforms;\n uniforms1.blurRadius = uniforms.blurRadius;\n uniforms1.gradientRadius = uniforms.gradientRadius;\n uniforms1.start = uniforms.start;\n uniforms1.end = uniforms.end;\n uniforms1.texSize = uniforms.texSize;\n\n bindProp(this, 'blurRadius', uniforms.blurRadius, 'value');\n bindProp(this, 'gradientRadius', uniforms.gradientRadius, 'value');\n\n this.updateFocusLine();\n ['start', 'end'].forEach(p => {\n watch(() => this[p], this.updateFocusLine, { deep: true });\n });\n\n this.pass.setSize = (width, height) => {\n uniforms.texSize.value.set(width, height);\n };\n },\n methods: {\n updateFocusLine() {\n this.uniforms.start.value.copy(this.start);\n this.uniforms.end.value.copy(this.end);\n const dv = new Vector2().copy(this.end).sub(this.start).normalize();\n this.uniforms.delta.value.copy(dv);\n this.uniforms1.delta.value.set(-dv.y, dv.x);\n },\n },\n __hmrId: 'TiltShiftPass',\n};\n","import { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n },\n watch: {\n strength() { this.pass.strength = this.strength; },\n radius() { this.pass.radius = this.radius; },\n threshold() { this.pass.threshold = this.threshold; },\n },\n mounted() {\n const size = new Vector2(this.three.size.width, this.three.size.height);\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'UnrealBloomPass',\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n center: { type: Object, default: { x: 0.5, y: 0.5 } },\n strength: { type: Number, default: 0.5 },\n },\n mounted() {\n this.pass = new ShaderPass(ZoomBlur);\n this.passes.push(this.pass);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n bindProp(this, 'center', uniforms.center, 'value');\n bindProp(this, 'strength', uniforms.strength, 'value');\n },\n __hmrId: 'ZoomBlurPass',\n};\n","import { createApp as _createApp } from 'vue';\nimport * as TROIS from './index.js';\n\nexport const TroisJSVuePlugin = {\n install: (app) => {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Gem',\n 'Image',\n 'InstancedMesh',\n 'MirrorMesh',\n 'RefractionMesh',\n 'Sprite',\n\n 'FBXModel',\n 'GLTFModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n\n 'GLTFViewer',\n ];\n\n comps.forEach(comp => {\n app.component(comp, TROIS[comp]);\n });\n },\n};\n\nexport function createApp(params) {\n return _createApp(params).use(TroisJSVuePlugin);\n};\n"],"names":["useThree","const","conf","canvas","antialias","alpha","autoClear","orbit_ctrl","mouse_move","mouse_raycast","mouse_over","click","resize","width","height","size","wWidth","wHeight","ratio","afterInitCallbacks","afterResizeCallbacks","beforeRenderCallbacks","mouse","Vector2","mouseV3","Vector3","mousePlane","Plane","raycaster","Raycaster","intersectObjects","obj","renderer","camera","cameraCtrl","materials","scene","params","Object","entries","forEach","key","value","console","error","WebGLRenderer","orbitCtrl","OrbitControls","domElement","onResize","window","addEventListener","setSize","mouse_move_element","document","body","onMousemove","onMouseleave","onClick","c","removeEventListener","dispose","this","update","render","composer","callback","push","filter","o","indexOf","i","splice","updateMouse","e","rect","target","getBoundingClientRect","x","clientX","left","y","clientY","top","setFromCamera","objects","length","object","onMousechange","getWorldDirection","normal","normalize","ray","intersectPlane","onObjects","offObjects","hover","onHover","let","innerWidth","innerHeight","elt","parentNode","clientWidth","clientHeight","aspect","updateProjectionMatrix","type","right","bottom","wsize","vFOV","fov","Math","PI","h","tan","abs","position","z","getCameraSize","name","props","Boolean","default","mouseMove","String","mouseRaycast","mouseOver","shadow","setup","three","raf","onMountedCallbacks","provide","rendererComponent","mounted","$el","init","shadowMap","enabled","animateC","animate","beforeUnmount","methods","onMounted","onBeforeRender","onAfterResize","requestAnimationFrame","renderC","$slots","__hmrId","setFromProp","prop","bindProps","src","dst","bindProp","srcProp","dstProp","ref","toRef","watch","deep","propsValues","exclude","values","includes","lerp","value1","value2","amount","lerpv2","v1","v2","lerpv3","limit","val","min","max","getMatcapUrl","hash","format","MATCAP_ROOT","defaultVertexShader","defaultFragmentShader","inject","Number","near","far","zoom","created","OrthographicCamera","p","lookAt","PerspectiveCamera","v","rotation","scale","unmounted","_parent","remove","o3d","initObject3D","parent","$parent","add","extends","Object3D","group","Group","id","background","Scene","Color","set","rotateX","rotateY","rotateZ","mesh","watchProps","$props","createGeometry","rotateGeometry","setGeometry","geometry","addWatchers","refreshGeometry","oldGeo","Geometry","depth","widthSegments","heightSegments","depthSegments","w","d","BoxGeometry","radius","segments","thetaStart","thetaLength","CircleGeometry","radialSegments","openEnded","ConeGeometry","radiusTop","radiusBottom","CylinderGeometry","detail","DodecahedronGeometry","IcosahedronGeometry","points","Array","phiStart","phiLength","LatheGeometry","OctahedronGeometry","vertices","indices","PolyhedronGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingGeometry","SphereGeometry","TetrahedronGeometry","tube","tubularSegments","arc","TorusGeometry","q","TorusKnotGeometry","path","Curve","radiusSegments","closed","TubeGeometry","color","intensity","castShadow","shadowMapSize","shadowCamera","light","initLight","mapSize","Light","AmbientLight","DirectionalLight","groundColor","HemisphereLight","distance","decay","PointLight","helper","RectAreaLightUniformsLib","RectAreaLight","lightHelper","RectAreaLightHelper","angle","penumbra","SpotLight","depthTest","depthWrite","fog","opacity","side","FrontSide","transparent","vertexColors","material","createMaterial","setMaterial","_addWatchers","setProp","needsUpdate","setTexture","texture","wireframeProps","wireframe","wireframeLinewidth","Material","MeshBasicMaterial","keys","MeshLambertMaterial","flatShading","opts","matcap","TextureLoader","load","MeshMatcapMaterial","emissive","emissiveIntensity","reflectivity","shininess","specular","MeshPhongMaterial","aoMapIntensity","bumpScale","displacementBias","displacementScale","envMapIntensity","lightMapIntensity","metalness","normalScale","roughness","refractionRatio","MeshStandardMaterial","StandardMaterial","MeshPhysicalMaterial","uniforms","vertexShader","fragmentShader","ShaderMaterial","string","find","replace","meshphongFragHead","ShaderChunk","meshphong_frag","slice","meshphongFragBody","SubsurfaceScatteringShader","UniformsUtils","merge","ShaderLib","phong","thicknessColor","thicknessDistortion","thicknessAmbient","thicknessAttenuation","thicknessPower","thicknessScale","lights_fragment_begin","split","join","clone","_key","_value","TShaderMaterial","lights","MeshToonMaterial","emits","onLoad","Function","onProgress","onError","mapping","UVMapping","wrapS","ClampToEdgeWrapping","wrapT","magFilter","LinearFilter","minFilter","LinearMipmapLinearFilter","repeat","center","refreshTexture","createTexture","onLoaded","$emit","urls","refraction","CubeTextureLoader","setPath","CubeRefractionMapping","receiveShadow","loading","initMesh","Mesh","over","component","addIntersectObject","event","removeIntersectObject","BoxBufferGeometry","CircleBufferGeometry","ConeBufferGeometry","CylinderBufferGeometry","DodecahedronBufferGeometry","IcosahedronBufferGeometry","LatheBufferGeometry","OctahedronBufferGeometry","PlaneBufferGeometry","PolyhedronBufferGeometry","RingBufferGeometry","SphereBufferGeometry","TetrahedronBufferGeometry","text","fontSrc","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align","TextProps","data","font","FontLoader","TextBufferGeometry","TorusBufferGeometry","TorusKnotBufferGeometry","updateTubeGeometryPoints","curve","CatmullRomCurve3","updateCurve","parameters","frames","computeFrenetFrames","tangents","normals","binormals","P","pArray","attributes","array","nArray","updateSegment","getPointAt","N","B","j","sin","cos","index","cubeRTSize","cubeCameraNear","cubeCameraFar","autoUpdate","initGem","updateCubeRT","offBeforeRender","meshBack","materialBack","cubeRT","WebGLCubeRenderTarget","RGBFormat","generateMipmaps","cubeCamera","CubeCamera","envMap","premultipliedAlpha","BackSide","TMesh","visible","keepSize","DoubleSide","map","loadTexture","screen","iRatio","image","count","beforeMount","InstancedMesh","initMirrorMesh","SpriteMaterial","sprite","Sprite","updateUV","iWidth","iHeight","positions","GLTFLoader","gltf","FBXLoader","fbx","passes","onAfterInit","EffectComposer","pass","addPass","offAfterResize","EffectPass","RenderPass","focus","aperture","maxblur","BokehPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","nIntensity","sIntensity","sCount","FilmPass","ShaderPass","FXAAShader","resolution","shape","rotateR","rotateG","rotateB","scatter","HalftonePass","SMAAPass","tDiffuse","blurRadius","gradientRadius","start","end","delta","texSize","DefaultShader","TiltShift","pass1","uniforms1","updateFocusLine","copy","dv","sub","strength","threshold","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","install","app","comp","TROIS","createApp","_createApp","use"],"mappings":"4uGAae,SAASA,KAEtBC,IAAMC,EAAO,CACXC,OAAQ,KACRC,WAAW,EACXC,OAAO,EACPC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZC,eAAe,EACfC,YAAY,EACZC,OAAO,EACPC,QAAQ,EACRC,MAAO,EACPC,OAAQ,GAIJC,EAAO,CACXF,MAAO,EAAGC,OAAQ,EAClBE,OAAQ,EAAGC,QAAS,EACpBC,MAAO,GAIHC,EAAqB,GACvBC,EAAuB,GACvBC,EAAwB,GAGtBC,EAAQ,IAAIC,EACZC,EAAU,IAAIC,EACdC,EAAa,IAAIC,EAAM,IAAIF,EAAQ,EAAG,EAAG,GAAI,GAC7CG,EAAY,IAAIC,EAGhBC,EAAmB,GAGnBC,EAAM,MACV7B,EACA8B,SAAU,KACVC,OAAQ,KACRC,WAAY,KACZC,UAAW,GACXC,MAAO,UACPrB,QACAO,UAAOE,OAeT,SAAca,GACRA,GACFC,OAAOC,QAAQF,GAAQG,uCACrBtC,EAAKuC,GAAOC,KAIhB,IAAKX,EAAIK,MAEP,YADAO,QAAQC,MAAM,iBAIhB,IAAKb,EAAIE,OAEP,YADAU,QAAQC,MAAM,kBAIhBb,EAAIC,SAAW,IAAIa,EAAc,CAAE1C,OAAQD,EAAKC,OAAQC,UAAWF,EAAKE,UAAWC,MAAOH,EAAKG,QAC/F0B,EAAIC,SAAS1B,UAAYJ,EAAKI,UAE1BJ,EAAKK,aACPwB,EAAIe,UAAY,IAAIC,GAAchB,EAAIE,OAAQF,EAAIC,SAASgB,YACvD9C,EAAKK,sBAAsB+B,QAC7BA,OAAOC,QAAQrC,EAAKK,YAAYiC,uCAC9BT,EAAIe,UAAUL,GAAOC,MAKvBxC,EAAKU,QACPqC,IACAC,OAAOC,iBAAiB,SAAUF,IAElCG,EAAqB,IAAblD,EAAKW,MAA2B,IAAdX,EAAKY,QAGjCZ,EAAKM,WAAaN,EAAKM,YAAcN,EAAKQ,WACtCR,EAAKM,aACiB,SAApBN,EAAKM,WACPuB,EAAIsB,mBAAqBC,SAASC,KAElCxB,EAAIsB,mBAAqBtB,EAAIC,SAASgB,WAExCjB,EAAIsB,mBAAmBF,iBAAiB,YAAaK,GACrDzB,EAAIsB,mBAAmBF,iBAAiB,aAAcM,IAGpDvD,EAAKS,OACPoB,EAAIC,SAASgB,WAAWG,iBAAiB,QAASO,GAKpD,OAFAvC,EAAmBqB,kBAAQmB,UAAKA,QAEzB,WA8ET,WACEtC,EAAwB,GACxB6B,OAAOU,oBAAoB,SAAUX,GACjClB,EAAIsB,qBACNtB,EAAIsB,mBAAmBO,oBAAoB,YAAaJ,GACxDzB,EAAIsB,mBAAmBO,oBAAoB,aAAcH,IAE3D1B,EAAIC,SAASgB,WAAWY,oBAAoB,QAASF,GACjD3B,EAAIe,WAAWf,EAAIe,UAAUe,UACjCC,KAAK9B,SAAS6B,kBA9ChB,WACM9B,EAAIe,WAAWf,EAAIe,UAAUiB,SACjC1C,EAAsBmB,kBAAQmB,UAAKA,OACnC5B,EAAIC,SAASgC,OAAOjC,EAAIK,MAAOL,EAAIE,iBAMrC,WACMF,EAAIe,WAAWf,EAAIe,UAAUiB,SACjC1C,EAAsBmB,kBAAQmB,UAAKA,OACnC5B,EAAIkC,SAASD,kBApHbZ,cAqEF,SAAqBc,GACnB/C,EAAmBgD,KAAKD,kBAM1B,SAAuBA,GACrB9C,EAAqB+C,KAAKD,mBAM5B,SAAwBA,GACtB9C,EAAuBA,EAAqBgD,iBAAOT,UAAKA,IAAMO,qBAMhE,SAAwBA,GACtB7C,EAAsB8C,KAAKD,oBAM7B,SAAyBA,GACvB7C,EAAwBA,EAAsB+C,iBAAOT,UAAKA,IAAMO,yBAwBlE,SAA4BG,IACW,IAAjCvC,EAAiBwC,QAAQD,IAC3BvC,EAAiBqC,KAAKE,0BAO1B,SAA+BA,GAC7BpE,IAAMsE,EAAIzC,EAAiBwC,QAAQD,IACxB,IAAPE,GACFzC,EAAiB0C,OAAOD,EAAG,KAqB/B,SAASE,EAAYC,GACnBzE,IAAM0E,EAAOD,EAAEE,OAAOC,wBACtBvD,EAAMwD,GAAMJ,EAAEK,QAAUJ,EAAKK,MAAQjE,EAAKF,MAAS,EAAI,EACvDS,EAAM2D,IAAOP,EAAEQ,QAAUP,EAAKQ,KAAOpE,EAAKD,OAAU,EAAI,EAM1D,SAAS4C,EAAQgB,GACfD,EAAYC,GACZ9C,EAAUwD,cAAc9D,EAAOS,EAAIE,QAEnC,IADAhC,IAAMoF,EAAUzD,EAAUE,iBAAiBA,GAClCyC,EAAI,EAAGA,EAAIc,EAAQC,OAAQf,IAAK,CACvCtE,IAAMoE,EAAIgB,EAAQd,GAAGgB,OACjBlB,EAAEX,SAASW,EAAEX,QAAQgB,IAO7B,SAASlB,EAAYkB,GACnBD,EAAYC,GACZc,IAMF,SAAS/B,EAAaiB,GAGpBc,IAMF,SAASA,EAAcd,GACrB,IAAIxE,EAAKQ,YAAcR,EAAKO,iBAC1BmB,EAAUwD,cAAc9D,EAAOS,EAAIE,QAE/B/B,EAAKO,gBAEPsB,EAAIE,OAAOwD,kBAAkB/D,EAAWgE,QACxChE,EAAWgE,OAAOC,YAClB/D,EAAUgE,IAAIC,eAAenE,EAAYF,IAGvCtB,EAAKQ,YAAY,CAGnB,IAFAT,IAAM6F,EAAYlE,EAAUE,iBAAiBA,GACvCiE,EAAa,UAAIjE,GACdyC,EAAI,EAAGA,EAAIuB,EAAUR,OAAQf,IAAK,CACzCtE,IAAMoE,EAAIyB,EAAUvB,GAAGgB,QAClBlB,EAAE2B,OAAS3B,EAAE4B,UAChB5B,EAAE2B,OAAQ,EACV3B,EAAE4B,SAAQ,IAEZF,EAAWvB,OAAOuB,EAAWzB,QAAQD,GAAI,GAE3C,IAAK6B,IAAI3B,EAAI,EAAGA,EAAIwB,EAAWT,OAAQf,IAAK,CAC1CtE,IAAMoE,EAAI0B,EAAWxB,GACjBF,EAAE2B,OAAS3B,EAAE4B,UACf5B,EAAE2B,OAAQ,EACV3B,EAAE4B,SAAQ,MAUpB,SAAShD,IACP,GAAoB,WAAhB/C,EAAKU,OACPwC,EAAQF,OAAOiD,WAAYjD,OAAOkD,iBAC7B,CACLnG,IAAMoG,EAAMtE,EAAIC,SAASgB,WAAWsD,WACpClD,EAAQiD,EAAIE,YAAaF,EAAIG,cAE/BpF,EAAqBoB,kBAAQmB,UAAKA,OAMpC,SAASP,EAAQvC,EAAOC,GAatB,GAZAC,EAAKF,MAAQA,EACbE,EAAKD,OAASA,EACdC,EAAKG,MAAQL,EAAQC,EAErBiB,EAAIC,SAASoB,QAAQvC,EAAOC,GAAQ,GACpCiB,EAAIE,OAAOwE,OAAS1F,EAAKG,MACzBa,EAAIE,OAAOyE,yBAEP3E,EAAIkC,UACNlC,EAAIkC,SAASb,QAAQvC,EAAOC,GAGN,uBAApBiB,EAAIE,OAAO0E,KACb5F,EAAKC,OAASe,EAAIE,OAAO2E,MAAQ7E,EAAIE,OAAO+C,KAC5CjE,EAAKE,QAAUc,EAAIE,OAAOkD,IAAMpD,EAAIE,OAAO4E,WACtC,CACL5G,IAAM6G,EAQV,WACE7G,IAAM8G,EAAQhF,EAAIE,OAAO+E,IAAMC,KAAKC,GAAM,IACpCC,EAAI,EAAIF,KAAKG,IAAIL,EAAO,GAAKE,KAAKI,IAAItF,EAAIE,OAAOqF,SAASC,GAEhE,MAAO,CADGJ,EAAIpF,EAAIE,OAAOwE,OACdU,GAZKK,GACdzG,EAAKC,OAAS8F,EAAM,GAAI/F,EAAKE,QAAU6F,EAAM,IAcjD,OAAO/E,ECjVT,OAAe,CACb0F,KAAM,WACNC,MAAO,CACLtH,UAAWuH,QACXtH,MAAOsH,QACPrH,UAAW,CAAEqG,KAAMgB,QAASC,SAAS,GACrCC,UAAW,CAAElB,KAAM,CAACgB,QAASG,QAASF,SAAS,GAC/CG,aAAc,CAAEpB,KAAMgB,QAASC,SAAS,GACxCI,UAAW,CAAErB,KAAMgB,QAASC,SAAS,GACrCjH,MAAO,CAAEgG,KAAMgB,QAASC,SAAS,GACjC9E,UAAW,CAAE6D,KAAM,CAACgB,QAASrF,QAASsF,SAAS,GAC/ChH,OAAQ,CAAE+F,KAAM,CAACgB,QAASG,QAASF,SAAS,GAC5CK,OAAQN,QACR9G,MAAOiH,OACPhH,OAAQgH,QAEVI,iBACE,MAAO,CACLC,MAAOnI,KACPoI,KAAK,EACLC,mBAAoB,KAGxBC,mBACE,MAAO,CACLH,MAAOrE,KAAKqE,MAEZI,kBAAmBzE,OAGvB0E,mBACEvI,IAAMoC,EAAS,CACblC,OAAQ2D,KAAK2E,IACbrI,UAAW0D,KAAK1D,UAChBC,MAAOyD,KAAKzD,MACZC,UAAWwD,KAAKxD,UAChBC,WAAYuD,KAAKhB,UACjBtC,WAAYsD,KAAK+D,UACjBpH,cAAeqD,KAAKiE,aACpBrH,WAAYoD,KAAKkE,UACjBrH,MAAOmD,KAAKnD,MACZC,OAAQkD,KAAKlD,OACbC,MAAOiD,KAAKjD,MACZC,OAAQgD,KAAKhD,QAGXgD,KAAKqE,MAAMO,KAAKrG,KAClByB,KAAK9B,SAAW8B,KAAKqE,MAAMnG,SAC3B8B,KAAK9B,SAAS2G,UAAUC,QAAU9E,KAAKmE,OACnCnE,KAAKqE,MAAMlE,SAAUH,KAAK+E,WACzB/E,KAAKgF,WAGZhF,KAAKuE,mBAAmB7F,kBAAQmB,UAAKA,QAEvCoF,yBACEjF,KAAKsE,KAAM,EACXtE,KAAKqE,MAAMtE,WAEbmF,QAAS,CACPC,mBAAU/E,GACRJ,KAAKuE,mBAAmBlE,KAAKD,IAE/BgF,wBAAehF,GACbJ,KAAKqE,MAAMe,eAAehF,IAE5BiF,uBAAcjF,GACZJ,KAAKqE,MAAMgB,cAAcjF,IAE3B4E,mBACMhF,KAAKsE,KAAKgB,sBAAsBtF,KAAKgF,SACzChF,KAAKqE,MAAMnE,UAEb6E,oBACM/E,KAAKsE,KAAKgB,sBAAsBtF,KAAK+E,UACzC/E,KAAKqE,MAAMkB,YAGfrF,kBACE,OAAOmD,EAAE,SAAU,GAAIrD,KAAKwF,OAAO1B,YAErC2B,QAAS,YClFJ,SAASC,GAAYnF,EAAGoF,GACzBA,aAAgBnH,QAClBA,OAAOC,QAAQkH,GAAMjH,uCACnB6B,EAAE5B,GAAOC,KAKR,SAASgH,GAAUC,EAAKjC,EAAOkC,GACpClC,EAAMlF,kBAAQiH,GACZI,GAASF,EAAKF,EAAMG,MAIjB,SAASC,GAASF,EAAKG,EAASF,EAAKG,GACrCA,IAASA,EAAUD,GACxB7J,IAAM+J,EAAMC,EAAMN,EAAKG,GACnBE,EAAItH,iBAAiBJ,QACvBkH,GAAYI,EAAIG,GAAUC,EAAItH,OAC9BwH,EAAMF,YAAMtH,GAAY8G,GAAYI,EAAIG,GAAUrH,KAAW,CAAEyH,MAAM,MAEjEH,EAAItH,QAAOkH,EAAIG,GAAWJ,EAAIG,IAClCI,EAAMF,YAAMtH,GAAYkH,EAAIG,GAAWrH,MAIpC,SAAS0H,GAAY1C,EAAO2C,GACjCpK,IAAMqK,EAAS,GAMf,OALAhI,OAAOC,QAAQmF,GAAOlF,yCACf6H,GAAYA,IAAYA,EAAQE,SAAS9H,MAC5C6H,EAAO7H,GAAOC,MAGX4H,EAGF,SAASE,GAAKC,EAAQC,EAAQC,GAGnC,OAAOF,GAAUC,EAASD,IAD1BE,GADAA,EAASA,EAAS,EAAI,EAAIA,GACR,EAAI,EAAIA,GAIrB,SAASC,GAAOC,EAAIC,EAAIH,GAC7BE,EAAG/F,EAAI0F,GAAKK,EAAG/F,EAAGgG,EAAGhG,EAAG6F,GACxBE,EAAG5F,EAAIuF,GAAKK,EAAG5F,EAAG6F,EAAG7F,EAAG0F,GAGnB,SAASI,GAAOF,EAAIC,EAAIH,GAC7BE,EAAG/F,EAAI0F,GAAKK,EAAG/F,EAAGgG,EAAGhG,EAAG6F,GACxBE,EAAG5F,EAAIuF,GAAKK,EAAG5F,EAAG6F,EAAG7F,EAAG0F,GACxBE,EAAGtD,EAAIiD,GAAKK,EAAGtD,EAAGuD,EAAGvD,EAAGoD,GAGnB,SAASK,GAAMC,EAAKC,EAAKC,GAC9B,OAAOF,EAAMC,EAAMA,EAAOD,EAAME,EAAMA,EAAMF,EAMvC,SAASG,GAAaC,EAAMC,GAEjC,sBAF0C,MAEhCC,0FAAeD,OADR,GAAGD,EAItB,SAA+BC,GAC7B,OAAQA,GACN,KAAK,GACH,MAAO,QACT,KAAK,IACH,MAAO,SACT,KAAK,IACH,MAAO,SACT,KAAK,IACH,MAAO,SACT,QACE,MAAO,KAfsCA,WAoBvC,IAACE,GAAsB,8HAOtBC,GAAwB,0FCtFtB,CACbhE,KAAM,qBACNiE,OAAQ,CAAC,SACThE,MAAO,CACL1C,KAAM,CAAE2B,KAAMgF,OAAQ/D,SAAU,GAChChB,MAAO,CAAED,KAAMgF,OAAQ/D,QAAS,GAChCzC,IAAK,CAAEwB,KAAMgF,OAAQ/D,QAAS,GAC9Bf,OAAQ,CAAEF,KAAMgF,OAAQ/D,SAAU,GAClCgE,KAAM,CAAEjF,KAAMgF,OAAQ/D,QAAS,IAC/BiE,IAAK,CAAElF,KAAMgF,OAAQ/D,QAAS,KAC9BkE,KAAM,CAAEnF,KAAMgF,OAAQ/D,QAAS,GAC/BN,SAAU,CAAEX,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,EAAGsC,EAAG,KAEtDwE,8BACEjI,KAAK7B,OAAS,IAAI+J,EAAmBlI,KAAKkB,KAAMlB,KAAK8C,MAAO9C,KAAKqB,IAAKrB,KAAK+C,OAAQ/C,KAAK8H,KAAM9H,KAAK+H,KACnGhC,GAAS/F,KAAM,WAAYA,KAAK7B,QAEhC,CAAC,OAAQ,QAAS,MAAO,SAAU,OAAQ,MAAO,QAAQO,kBAAQyJ,GAChE/B,qBAAYpG,EAAKmI,iBACfnI,EAAK7B,OAAOgK,GAAKnI,EAAKmI,GACtBnI,EAAK7B,OAAOyE,+BAIhB5C,KAAKqE,MAAMlG,OAAS6B,KAAK7B,QAE3B+B,kBAAW,MAAO,IAClBuF,QAAS,yBC3BI,CACb9B,KAAM,oBACNiE,OAAQ,CAAC,SACThE,MAAO,CACLjB,OAAQ,CAAEE,KAAMgF,OAAQ/D,QAAS,GACjCiE,IAAK,CAAElF,KAAMgF,OAAQ/D,QAAS,KAC9BZ,IAAK,CAAEL,KAAMgF,OAAQ/D,QAAS,IAC9BgE,KAAM,CAAEjF,KAAMgF,OAAQ/D,QAAS,IAC/BN,SAAU,CAAEX,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,EAAGsC,EAAG,IACpD2E,OAAQ,CAAEvF,KAAMrE,OAAQsF,QAAS,OAEnCmE,8BACEjI,KAAK7B,OAAS,IAAIkK,EAAkBrI,KAAKkD,IAAKlD,KAAK2C,OAAQ3C,KAAK8H,KAAM9H,KAAK+H,KAC3EhC,GAAS/F,KAAM,WAAYA,KAAK7B,QAE5B6B,KAAKoI,QAAQpI,KAAK7B,OAAOiK,OAAOpI,KAAKoI,OAAOpH,EAAGhB,KAAKoI,OAAOjH,EAAGnB,KAAKoI,OAAO3E,GAC9E2C,qBAAYpG,EAAKoI,mBAASE,GAAQtI,EAAK7B,OAAOiK,OAAOE,EAAEtH,EAAGsH,EAAEnH,EAAGmH,EAAE7E,KAAO,CAAE4C,MAAM,IAEhF,CAAC,SAAU,MAAO,MAAO,QAAQ3H,kBAAQyJ,GACvC/B,qBAAYpG,EAAKmI,iBACfnI,EAAK7B,OAAOgK,GAAKnI,EAAKmI,GACtBnI,EAAK7B,OAAOyE,+BAIhB5C,KAAKqE,MAAMlG,OAAS6B,KAAK7B,QAE3B+B,kBAAW,MAAO,IAClBuF,QAAS,wBC7BI,CACb9B,KAAM,WACNiE,OAAQ,CAAC,QAAS,QAAS,qBAC3BhE,MAAO,CACLJ,SAAU,CAAEX,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,EAAGsC,EAAG,IACpD8E,SAAU,CAAE1F,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,EAAGsC,EAAG,IACpD+E,MAAO,CAAE3F,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,EAAGsC,EAAG,IACjD2E,OAAQ,CAAEvF,KAAMrE,OAAQsF,QAAS,OAInC2E,qBACMzI,KAAK0I,SAAS1I,KAAK0I,QAAQC,OAAO3I,KAAK4I,MAE7C1D,QAAS,CACP2D,sBAAaD,cACX5I,KAAK4I,IAAMA,EAEX7C,GAAS/F,KAAM,WAAYA,KAAK4I,KAChC7C,GAAS/F,KAAM,WAAYA,KAAK4I,KAChC7C,GAAS/F,KAAM,QAASA,KAAK4I,KAGzB5I,KAAKoI,QAAQpI,KAAK4I,IAAIR,OAAOpI,KAAKoI,OAAOpH,EAAGhB,KAAKoI,OAAOjH,EAAGnB,KAAKoI,OAAO3E,GAC3E2C,qBAAYpG,EAAKoI,mBAASE,GAAQtI,EAAK4I,IAAIR,OAAOE,EAAEtH,EAAGsH,EAAEnH,EAAGmH,EAAE7E,KAAO,CAAE4C,MAAM,IAG7E,IADAjE,IAAI0G,EAAS9I,KAAK+I,QACXD,GAAQ,CACb,GAAIA,EAAOE,IAAK,CACdF,EAAOE,IAAIhJ,KAAK4I,KAChB5I,KAAK0I,QAAUI,EACf,MAEFA,EAASA,EAAOC,QAEb/I,KAAK0I,SAAS7J,QAAQC,MAAM,qCAEnCkK,aAAIzI,GAAKP,KAAK4I,IAAII,IAAIzI,IACtBoI,gBAAOpI,GAAKP,KAAK4I,IAAID,OAAOpI,KAE9BL,kBACE,OAAOF,KAAKwF,OAAO1B,QAAU9D,KAAKwF,OAAO1B,UAAY,IAEvD2B,QAAS,eC3CI,CACb9B,KAAM,QACNsF,QAASC,GACTjB,mBACEjI,KAAKmJ,MAAQ,IAAIC,EACjBpJ,KAAK6I,aAAa7I,KAAKmJ,QAEzB1D,QAAS,YCPI,CACb9B,KAAM,QACNiE,OAAQ,CAAC,SACThE,MAAO,CACLyF,GAAIrF,OACJsF,WAAY,CAACtF,OAAQ6D,SAEvBzD,eAAMR,GACJzH,IAAMmC,EAAQ,IAAIiL,EAGlB,OAFI3F,EAAM0F,aAAYhL,EAAMgL,WAAa,IAAIE,EAAM5F,EAAM0F,aACzDlD,qBAAYxC,EAAM0F,uBAAa1K,GAAYN,EAAMgL,WAAWG,IAAI7K,MACzD,OAAEN,IAEXkG,mBACE,MAAO,CACLlG,MAAO0B,KAAK1B,QAGhBoG,mBACO1E,KAAKqE,MAAM/F,QACd0B,KAAKqE,MAAM/F,MAAQ0B,KAAK1B,QAG5B4G,QAAS,CACP8D,aAAIzI,GAAKP,KAAK1B,MAAM0K,IAAIzI,IACxBoI,gBAAOpI,GAAKP,KAAK1B,MAAMqK,OAAOpI,KAEhCL,kBACE,OAAOF,KAAKwF,OAAO1B,QAAU9D,KAAKwF,OAAO1B,UAAY,IAEvD2B,QAAS,YC/BI,CACbmC,OAAQ,CAAC,QACThE,MAAO,CACL8F,QAAS7B,OACT8B,QAAS9B,OACT+B,QAAS/B,QAEXI,8BACOjI,KAAK6J,MACRhL,QAAQC,MAAM,uBAGhBkB,KAAK8J,WAAa,GAClBtL,OAAOC,QAAQuB,KAAK+J,QAAQrL,kBAAQkC,UAAKZ,EAAK8J,WAAWzJ,KAAKO,EAAE,OAEhEZ,KAAKgK,iBACLhK,KAAKiK,iBACLjK,KAAK6J,KAAKK,YAAYlK,KAAKmK,UAE3BnK,KAAKoK,eAEP3B,qBACEzI,KAAKmK,SAASpK,WAEhBmF,QAAS,CACPkF,kCACEpK,KAAK8J,WAAWpL,kBAAQiH,GACtBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXJ,0BACMjK,KAAK0J,SAAS1J,KAAKmK,SAAST,QAAQ1J,KAAK0J,SACzC1J,KAAK2J,SAAS3J,KAAKmK,SAASR,QAAQ3J,KAAK2J,SACzC3J,KAAK4J,SAAS5J,KAAKmK,SAASP,QAAQ5J,KAAK4J,UAE/CS,2BACElO,IAAMmO,EAAStK,KAAKmK,SACpBnK,KAAKgK,iBACLhK,KAAKiK,iBACLjK,KAAK6J,KAAKK,YAAYlK,KAAKmK,UAC3BG,EAAOvK,YAGXG,kBAAW,MAAO,QC5CL,CACb+I,QAASsB,GACT3G,MAAO,CACL3G,KAAM4K,OACN9K,MAAO,CAAE8F,KAAMgF,OAAQ/D,QAAS,GAChC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjC0G,MAAO,CAAE3H,KAAMgF,OAAQ/D,QAAS,GAChC2G,cAAe,CAAE5H,KAAMgF,OAAQ/D,QAAS,GACxC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,GACzC6G,cAAe,CAAE9H,KAAMgF,OAAQ/D,QAAS,IAE1CoB,QAAS,CACP8E,0BACE5H,IAAIwI,EAAI5K,KAAKjD,MAAOsG,EAAIrD,KAAKhD,OAAQ6N,EAAI7K,KAAKwK,MAC1CxK,KAAK/C,OACP2N,EAAI5K,KAAK/C,KAAMoG,EAAIrD,KAAK/C,KAAM4N,EAAI7K,KAAK/C,MAEzC+C,KAAKmK,SAAW,IAAIW,EAAYF,EAAGvH,EAAGwH,EAAG7K,KAAKyK,cAAezK,KAAK0K,eAAgB1K,KAAK2K,qBCjB9E,CACb1B,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjCkH,SAAU,CAAEnI,KAAMgF,OAAQ/D,QAAS,GACnCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C8B,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIgB,EAAenL,KAAK+K,OAAQ/K,KAAKgL,SAAUhL,KAAKiL,WAAYjL,KAAKkL,mBCV5E,CACbjC,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjCsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,GACzCuH,UAAW,CAAExI,KAAMgB,QAASC,SAAS,GACrCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C8B,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAImB,EAAatL,KAAK+K,OAAQ/K,KAAKhD,OAAQgD,KAAKoL,eAAgBpL,KAAK0K,eAAgB1K,KAAKqL,UAAWrL,KAAKiL,WAAYjL,KAAKkL,mBCblI,CACbjC,QAASsB,GACT3G,MAAO,CACL2H,UAAW,CAAE1I,KAAMgF,OAAQ/D,QAAS,GACpC0H,aAAc,CAAE3I,KAAMgF,OAAQ/D,QAAS,GACvC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjCsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,GACzCuH,UAAW,CAAExI,KAAMgB,QAASC,SAAS,GACrCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C8B,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIsB,EAAiBzL,KAAKuL,UAAWvL,KAAKwL,aAAcxL,KAAKhD,OAAQgD,KAAKoL,eAAgBpL,KAAK0K,eAAgB1K,KAAKqL,UAAWrL,KAAKiL,WAAYjL,KAAKkL,mBCd5J,CACbjC,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIwB,EAAqB3L,KAAK+K,OAAQ/K,KAAK0L,cCRlD,CACbzC,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIyB,EAAoB5L,KAAK+K,OAAQ/K,KAAK0L,cCRjD,CACbzC,QAASsB,GACT3G,MAAO,CACLiI,OAAQC,MACRd,SAAU,CAAEnI,KAAMgF,OAAQ/D,QAAS,IACnCiI,SAAU,CAAElJ,KAAMgF,OAAQ/D,QAAS,GACnCkI,UAAW,CAAEnJ,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE3C8B,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI8B,EAAcjM,KAAK6L,OAAQ7L,KAAKgL,SAAUhL,KAAK+L,SAAU/L,KAAKgM,iBCVzE,CACb/C,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI+B,EAAmBlM,KAAK+K,OAAQ/K,KAAK0L,cCRhD,CACbzC,QAASsB,GACT3G,MAAO,CACLuI,SAAUL,MACVM,QAASN,MACTf,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIkC,EAAmBrM,KAAKmM,SAAUnM,KAAKoM,QAASpM,KAAK+K,OAAQ/K,KAAK0L,cCV7E,CACbzC,QAASsB,GACT3G,MAAO,CACL0I,YAAa,CAAEzJ,KAAMgF,OAAQ/D,QAAS,IACtCyI,YAAa,CAAE1J,KAAMgF,OAAQ/D,QAAS,GACtC0I,cAAe,CAAE3J,KAAMgF,OAAQ/D,QAAS,GACxC2I,YAAa,CAAE5J,KAAMgF,OAAQ/D,QAAS,GACtCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C8B,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIuC,EAAa1M,KAAKsM,YAAatM,KAAKuM,YAAavM,KAAKwM,cAAexM,KAAKyM,YAAazM,KAAKiL,WAAYjL,KAAKkL,mBCZxH,CACbjC,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC2G,cAAe,CAAE5H,KAAMgF,OAAQ/D,QAAS,IACxC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,KAE3CoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIwC,EAAe3M,KAAK+K,OAAQ/K,KAAKyK,cAAezK,KAAK0K,sBCThE,CACbzB,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIyC,EAAoB5M,KAAK+K,OAAQ/K,KAAK0L,cCRjD,CACbzC,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC+I,KAAM,CAAEhK,KAAMgF,OAAQ/D,QAAS,IAC/BsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzCgJ,gBAAiB,CAAEjK,KAAMgF,OAAQ/D,QAAS,GAC1CiJ,IAAK,CAAElK,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAErC8B,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI6C,EAAchN,KAAK+K,OAAQ/K,KAAK6M,KAAM7M,KAAKoL,eAAgBpL,KAAK8M,gBAAiB9M,KAAK+M,WCXjG,CACb9D,QAASsB,GACT3G,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC+I,KAAM,CAAEhK,KAAMgF,OAAQ/D,QAAS,IAC/BgJ,gBAAiB,CAAEjK,KAAMgF,OAAQ/D,QAAS,IAC1CsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzCqE,EAAG,CAAEtF,KAAMgF,OAAQ/D,QAAS,GAC5BmJ,EAAG,CAAEpK,KAAMgF,OAAQ/D,QAAS,IAE9BoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI+C,EAAkBlN,KAAK+K,OAAQ/K,KAAK6M,KAAM7M,KAAK8M,gBAAiB9M,KAAKoL,eAAgBpL,KAAKmI,EAAGnI,KAAKiN,SCZ7G,CACbhE,QAASsB,GACT3G,MAAO,CACLuJ,KAAMC,EACNN,gBAAiB,CAAEjK,KAAMgF,OAAQ/D,QAAS,IAC1CiH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjCuJ,eAAgB,CAAExK,KAAMgF,OAAQ/D,QAAS,GACzCwJ,OAAQ,CAAEzK,KAAMgB,QAASC,SAAS,IAEpCoB,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIoD,EAAavN,KAAKmN,KAAMnN,KAAK8M,gBAAiB9M,KAAK+K,OAAQ/K,KAAKqN,eAAgBrN,KAAKsN,cCVhG,CACbrE,QAASC,GACTvF,KAAM,QACNC,MAAO,CACL4J,MAAO,CAAE3K,KAAMmB,OAAQF,QAAS,WAChC2J,UAAW,CAAE5K,KAAMgF,OAAQ/D,QAAS,GACpC4J,WAAY,CAAE7K,KAAMgB,QAASC,SAAS,GACtC6J,cAAe,CAAE9K,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,IAAKG,EAAG,MACrDyM,aAAc,CAAE/K,KAAMrE,OAAQsF,QAAS,KAIzC2E,qBACMzI,KAAK6N,MAAM/M,QAAQd,KAAK+I,QAAQJ,OAAO3I,KAAK6N,MAAM/M,SAExDoE,QAAS,CACP4I,gCACM9N,KAAK6N,MAAM/M,QACbiF,GAAS/F,KAAM,SAAUA,KAAK6N,MAAM/M,OAAQ,YAG1Cd,KAAK6N,MAAM1J,SACbnE,KAAK6N,MAAMH,WAAa1N,KAAK0N,WAC7BhI,GAAY1F,KAAK6N,MAAM1J,OAAO4J,QAAS/N,KAAK2N,eAC5CjI,GAAY1F,KAAK6N,MAAM1J,OAAOhG,OAAQ6B,KAAK4N,eAG7C,CAAC,QAAS,YAAa,cAAclP,kBAAQyJ,GAC3C/B,qBAAYpG,EAAKmI,iBACL,UAANA,EACFnI,EAAK6N,MAAML,MAAM/D,IAAIzJ,EAAKwN,OAE1BxN,EAAK6N,MAAM1F,GAAKnI,EAAKmI,SAK3BnI,KAAK6I,aAAa7I,KAAK6N,OACnB7N,KAAK6N,MAAM/M,QAAQd,KAAK+I,QAAQC,IAAIhJ,KAAK6N,MAAM/M,UAGvD2E,QAAS,YC1CI,CACbwD,QAAS+E,GACT/F,mBACEjI,KAAK6N,MAAQ,IAAII,EAAajO,KAAKwN,MAAOxN,KAAKyN,WAC/CzN,KAAK8N,aAEPrI,QAAS,mBCNI,CACbwD,QAAS+E,GACTpK,MAAO,CACL9C,OAAQtC,QAEVyJ,mBACEjI,KAAK6N,MAAQ,IAAIK,EAAiBlO,KAAKwN,MAAOxN,KAAKyN,WACnDzN,KAAK8N,aAEPrI,QAAS,uBCRI,CACbwD,QAAS+E,GACTpK,MAAO,CACLuK,YAAa,CAAEtL,KAAMmB,OAAQF,QAAS,YAExCmE,8BACEjI,KAAK6N,MAAQ,IAAIO,EAAgBpO,KAAKwN,MAAOxN,KAAKmO,YAAanO,KAAKyN,WACpErH,qBAAYpG,EAAKmO,wBAAcvP,GAAYoB,EAAK6N,MAAMM,YAAY1E,IAAI7K,MACtEoB,KAAK8N,aAEPrI,QAAS,sBCXI,CACbwD,QAAS+E,GACTpK,MAAO,CACLyK,SAAU,CACRxL,KAAMgF,OACN/D,QAAS,GAEXwK,MAAO,CACLzL,KAAMgF,OACN/D,QAAS,IAGbmE,mBACEjI,KAAK6N,MAAQ,IAAIU,EAAWvO,KAAKwN,MAAOxN,KAAKyN,UAAWzN,KAAKqO,SAAUrO,KAAKsO,OAC5EtO,KAAK8N,aAEPrI,QAAS,iBCbI,CACbwD,QAAS+E,GACTpK,MAAO,CACL7G,MAAO,CAAE8F,KAAMgF,OAAQ/D,QAAS,IAChC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,IACjC0K,OAAQ3K,SAEVoE,8BACEwG,GAAyB7J,OACzB5E,KAAK6N,MAAQ,IAAIa,EAAc1O,KAAKwN,MAAOxN,KAAKyN,UAAWzN,KAAKjD,MAAOiD,KAAKhD,QAE5E,CAAC,QAAS,UAAU0B,kBAAQyJ,GAC1B/B,qBAAYpG,EAAKmI,iBACfnI,EAAK6N,MAAM1F,GAAKnI,EAAKmI,SAIrBnI,KAAKwO,SACPxO,KAAK2O,YAAc,IAAIC,GAAoB5O,KAAK6N,OAChD7N,KAAK+I,QAAQC,IAAIhJ,KAAK2O,cAGxB3O,KAAK8N,aAEPrF,qBACMzI,KAAK2O,aAAa3O,KAAK+I,QAAQJ,OAAO3I,KAAK2O,cAEjDlJ,QAAS,oBC7BI,CACbwD,QAAS+E,GACTpK,MAAO,CACLiL,MAAO,CAAEhM,KAAMgF,OAAQ/D,QAASX,KAAKC,GAAK,GAC1CkL,MAAO,CAAEzL,KAAMgF,OAAQ/D,QAAS,GAChCuK,SAAU,CAAExL,KAAMgF,OAAQ/D,QAAS,GACnCgL,SAAU,CAAEjM,KAAMgF,OAAQ/D,QAAS,GACnChD,OAAQtC,QAEVyJ,8BACEjI,KAAK6N,MAAQ,IAAIkB,EAAU/O,KAAKwN,MAAOxN,KAAKyN,UAAWzN,KAAKqO,SAAUrO,KAAK6O,MAAO7O,KAAK8O,SAAU9O,KAAKsO,OACtG,CAAC,QAAS,QAAS,WAAY,YAAY5P,kBAAQyJ,GACjD/B,qBAAYpG,EAAKmI,iBACfnI,EAAK6N,MAAM1F,GAAKnI,EAAKmI,SAGzBnI,KAAK8N,aAEPrI,QAAS,gBCnBI,CACbmC,OAAQ,CAAC,QAAS,QAClBhE,MAAO,CACL4J,MAAO,CAAE3K,KAAM,CAACmB,OAAQ6D,QAAS/D,QAAS,WAC1CkL,UAAW,CAAEnM,KAAMgB,QAASC,SAAS,GACrCmL,WAAY,CAAEpM,KAAMgB,QAASC,SAAS,GACtCoL,IAAK,CAAErM,KAAMgB,QAASC,SAAS,GAC/BqL,QAAS,CAAEtM,KAAMgF,OAAQ/D,QAAS,GAClCsL,KAAM,CAAEvM,KAAMgF,OAAQ/D,QAASuL,GAC/BC,YAAazL,QACb0L,aAAc1L,SAEhBW,mBACE,MAAO,CACLgL,SAAUxP,OAGdiI,mBACEjI,KAAKyP,iBACLzP,KAAK6J,KAAK6F,YAAY1P,KAAKwP,UAE3BxP,KAAK2P,eACD3P,KAAKoK,aAAapK,KAAKoK,eAE7B3B,qBACEzI,KAAKwP,SAASzP,WAEhBmF,QAAS,CACP0K,iBAAQjR,EAAKC,EAAOiR,mBAAc,GAChC7P,KAAKwP,SAAS7Q,GAAOC,EACrBoB,KAAKwP,SAASK,YAAcA,GAE9BC,oBAAWC,EAASpR,kBAAM,OACxBqB,KAAK4P,QAAQjR,EAAKoR,GAAS,IAE7BJ,mCACE,CAAC,QAAS,YAAa,aAAc,MAAO,UAAW,OAAQ,eAAejR,kBAAQyJ,GACpF/B,qBAAYpG,EAAKmI,iBACL,UAANA,EACFnI,EAAKwP,SAAShC,MAAM/D,IAAIzJ,EAAKwN,OAE7BxN,EAAKwP,SAASrH,GAAKnI,EAAKmI,WAMlCjI,kBACE,OAAOF,KAAKwF,OAAO1B,QAAU9D,KAAKwF,OAAO1B,UAAY,IAEvD2B,QAAS,YAGEuK,GAAiB,CAC5BC,UAAW,CAAEpN,KAAMgB,QAASC,SAAS,GAIrCoM,mBAAoB,CAAErN,KAAMgF,OAAQ/D,QAAS,OCzDhC,CACbmF,QAASkH,GACTvM,MAAOpF,iBACFwR,IAEL9K,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAIY,EAAkB9J,GAAYtG,KAAK+J,UAEzDK,uBACExE,GAAU5F,KAAMxB,OAAO6R,KAAKL,IAAiBhQ,KAAKwP,YAGtD/J,QAAS,oBCbI,CACbwD,QAASkH,GACTvM,MAAOpF,iBACFwR,IAEL9K,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAIc,EAAoBhK,GAAYtG,KAAK+J,UAE3DK,uBACExE,GAAU5F,KAAMxB,OAAO6R,KAAKL,IAAiBhQ,KAAKwP,YAGtD/J,QAAS,sBCZI,CACbwD,QAASkH,GACTvM,MAAO,CACLiC,IAAK7B,OACLL,KAAMK,OACNuM,YAAa1M,SAEfqB,QAAS,CACPuK,0BACEtT,IAAM0J,EAAM7F,KAAK2D,KAAO2D,GAAatH,KAAK2D,MAAQ3D,KAAK6F,IACjD2K,EAAOlK,GAAYtG,KAAK+J,OAAQ,CAAC,MAAO,SAC9CyG,EAAKC,QAAS,IAAIC,GAAgBC,KAAK9K,GACvC7F,KAAKwP,SAAW,IAAIoB,EAAmBJ,IAEzCpG,0BAIF3E,QAAS,qBClBI,CACbwD,QAASkH,GACTvM,MAAOpF,kBACLqS,SAAU,CAAEhO,KAAM,CAACgF,OAAQ7D,QAASF,QAAS,GAC7CgN,kBAAmB,CAAEjO,KAAMgF,OAAQ/D,QAAS,GAC5CiN,aAAc,CAAElO,KAAMgF,OAAQ/D,QAAS,GACvCkN,UAAW,CAAEnO,KAAMgF,OAAQ/D,QAAS,IACpCmN,SAAU,CAAEpO,KAAM,CAACmB,OAAQ6D,QAAS/D,QAAS,SAC7CyM,YAAa1M,SACVmM,IAEL9K,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAI0B,EAAkB5K,GAAYtG,KAAK+J,UAEzDK,kCAEE,CAAC,WAAY,oBAAqB,eAAgB,YAAa,YAAY1L,kBAAQyJ,GACjF/B,qBAAYpG,EAAKmI,eAAKvJ,GACV,aAANuJ,GAA0B,aAANA,EACtBnI,EAAKwP,SAASrH,GAAGsB,IAAI7K,GAErBoB,EAAKwP,SAASrH,GAAKvJ,QAIzBgH,GAAU5F,KAAMxB,OAAO6R,KAAKL,IAAiBhQ,KAAKwP,YAGtD/J,QAAS,iBC7BL7B,GAAQ,CACZuN,eAAgB,CAAEtO,KAAMgF,OAAQ/D,QAAS,GACzCsN,UAAW,CAAEvO,KAAMgF,OAAQ/D,QAAS,GACpCuN,iBAAkB,CAAExO,KAAMgF,OAAQ/D,QAAS,GAC3CwN,kBAAmB,CAAEzO,KAAMgF,OAAQ/D,QAAS,GAC5C+M,SAAU,CAAEhO,KAAM,CAACgF,OAAQ7D,QAASF,QAAS,GAC7CgN,kBAAmB,CAAEjO,KAAMgF,OAAQ/D,QAAS,GAC5CyN,gBAAiB,CAAE1O,KAAMgF,OAAQ/D,QAAS,GAC1C0N,kBAAmB,CAAE3O,KAAMgF,OAAQ/D,QAAS,GAC5C2N,UAAW,CAAE5O,KAAMgF,OAAQ/D,QAAS,GACpC4N,YAAa,CAAE7O,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,IACjDwQ,UAAW,CAAE9O,KAAMgF,OAAQ/D,QAAS,GACpC8N,gBAAiB,CAAE/O,KAAMgF,OAAQ/D,QAAS,KAC1CyM,YAAa1M,YAGA,CACboF,QAASkH,GACTvM,MAAOpF,iBACFoF,GACAoM,IAEL9K,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAIqC,EAAqBvL,GAAYtG,KAAK+J,OAAQ,CAAC,kBAErEK,kCAEE5L,OAAO6R,KAAKzM,IAAOlF,kBAAQyJ,GACf,gBAANA,GACJ/B,qBAAYpG,EAAKmI,eAAKvJ,GACV,aAANuJ,EACFnI,EAAKwP,SAASrH,GAAGsB,IAAI7K,GAErBoB,EAAKwP,SAASrH,GAAKvJ,QAIzBmH,GAAS/F,KAAM,cAAeA,KAAKwP,UACnC5J,GAAU5F,KAAMxB,OAAO6R,KAAKL,IAAiBhQ,KAAKwP,YAGtD/J,QAAS,uBC3CI,CACbwD,QAAS6I,GACTlO,MAAO,CACL2M,YAAa1M,SAEfqB,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAIuC,EAAqBzL,GAAYtG,KAAK+J,UAE5DK,0BAIF3E,QAAS,uBCbI,CACbmC,OAAQ,CAAC,QAAS,QAClBhE,MAAO,CACLoO,SAAU,CAAEnP,KAAMrE,OAAQsF,mBAAiB,MAAO,KAClDmO,aAAc,CAAEpP,KAAMmB,OAAQF,QAAS4D,IACvCwK,eAAgB,CAAErP,KAAMmB,OAAQF,QAAS6D,KAE3CM,8BACEjI,KAAKyP,iBACL,CAAC,eAAgB,kBAAkB/Q,kBAAQyJ,GACzC/B,qBAAYpG,EAAKmI,iBAEfnI,EAAKwP,SAASzP,UACdC,EAAKyP,wBAIXhH,qBACEzI,KAAKwP,SAASzP,WAEhBmF,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAI2C,EAAe7L,GAAYtG,KAAK+J,SACpD/J,KAAK6J,KAAK6F,YAAY1P,KAAKwP,YAG/BtP,kBACE,MAAO,IAETuF,QAAS,kBCdXtJ,IAJoBiW,GAAQC,GAAMC,GAI5BC,GAAoBC,EAAYC,eAAeC,MAAM,EAAGF,EAAYC,eAAejS,QAAQ,kBAC3FmS,GAAoBH,EAAYC,eAAeC,MAAMF,EAAYC,eAAejS,QAAQ,kBAExFoS,GAA6B,CAEjCZ,SAAUa,EAAcC,MAAM,CAC5BC,EAAUC,MAAMhB,SAChB,CACEiB,eAAgB,CAAErU,MAAO,IAAI4K,EAAM,WACnC0J,oBAAqB,CAAEtU,MAAO,IAC9BuU,iBAAkB,CAAEvU,MAAO,GAC3BwU,qBAAsB,CAAExU,MAAO,IAC/ByU,eAAgB,CAAEzU,MAAO,GACzB0U,eAAgB,CAAE1U,MAAO,OAI7BqT,0CAEIO,wBAGJN,eAAgB,uDAIZK,g7BAoBAI,GAAkBL,QACpB,oCAnDgBF,GAqDdI,EAAYe,sBArDUlB,GAsDtB,gEAtD4BC,GAuD5B,uOAtDGF,GAAOoB,MAAMnB,IAAMoB,KAAKnB,UCblB,CACb1K,OAAQ,CAAC,QAAS,QAClBhE,MAAO,CACL4J,MAAO,CAAE3K,KAAMmB,OAAQF,QAAS,WAChCmP,eAAgB,CAAEpQ,KAAMmB,OAAQF,QAAS,WACzCoP,oBAAqB,CAAErQ,KAAMgF,OAAQ/D,QAAS,IAC9CqP,iBAAkB,CAAEtQ,KAAMgF,OAAQ/D,QAAS,KAC3CsP,qBAAsB,CAAEvQ,KAAMgF,OAAQ/D,QAAS,IAC/CuP,eAAgB,CAAExQ,KAAMgF,OAAQ/D,QAAS,GACzCwP,eAAgB,CAAEzQ,KAAMgF,OAAQ/D,QAAS,GACzCwL,YAAa,CAAEzM,KAAMgB,QAASC,SAAS,GACvCqL,QAAS,CAAEtM,KAAMgF,OAAQ/D,QAAS,GAClCyL,aAAc,CAAE1M,KAAMgB,QAASC,SAAS,IAE1CmE,mBACEjI,KAAKyP,iBACLzP,KAAK6J,KAAK6F,YAAY1P,KAAKwP,WAE7B/G,qBACEzI,KAAKwP,SAASzP,WAEhBmF,QAAS,CACPuK,0BACEtT,IAAMoC,EAASqU,GACTZ,EAAWa,EAAca,MAAMnV,EAAOyT,UAE5CxT,OAAOC,QAAQuB,KAAK+J,QAAQrL,uCACtBiV,EAAOhV,EAAKiV,EAAShV,EACrB,CAAC,QAAS,kBAAkB6H,SAAS9H,KAC3B,UAARA,IAAiBgV,EAAO,WAC5BC,EAAS,IAAIpK,EAAM5K,IAEhB,CAAC,cAAe,gBAAgB6H,SAAS9H,KAC5CqT,EAAS2B,GAAM/U,MAAQgV,MAI3B5T,KAAKwP,SAAW,IAAIqE,EAAgBrV,iBAC/BD,YACHyT,EACA8B,QAAQ,EACRxE,YAAatP,KAAKsP,YAClBC,aAAcvP,KAAKuP,kBAIzBrP,kBACE,MAAO,IAETuF,QAAS,yBChDI,CACbwD,QAASkH,GACTvM,MAAOpF,iBACFwR,IAEL9K,QAAS,CACPuK,0BACEzP,KAAKwP,SAAW,IAAIuE,EAAiBzN,GAAYtG,KAAK+J,UAExDK,uBACExE,GAAU5F,KAAMxB,OAAO6R,KAAKL,IAAiBhQ,KAAKwP,YAGtD/J,QAAS,mBCbI,CACbmC,OAAQ,CAAC,YACToM,MAAO,CAAC,UACRpQ,MAAO,CACLyF,GAAI,CAAExG,KAAMmB,OAAQF,QAAS,OAC7B+B,IAAK7B,OACLiQ,OAAQC,SACRC,WAAYD,SACZE,QAASF,SACTG,QAAS,CAAExR,KAAMgF,OAAQ/D,QAASwQ,GAClCC,MAAO,CAAE1R,KAAMgF,OAAQ/D,QAAS0Q,GAChCC,MAAO,CAAE5R,KAAMgF,OAAQ/D,QAAS0Q,GAChCE,UAAW,CAAE7R,KAAMgF,OAAQ/D,QAAS6Q,GACpCC,UAAW,CAAE/R,KAAMgF,OAAQ/D,QAAS+Q,GACpCC,OAAQ,CAAEjS,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,IAC5CoH,SAAU,CAAE1F,KAAMgF,OAAQ/D,QAAS,GACnCiR,OAAQ,CAAElS,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,KAE9C8G,8BACEjI,KAAKgV,iBACL5O,qBAAYpG,EAAK6F,MAAK7F,KAAKgV,iBAE7BvM,qBACEzI,KAAKwP,SAASM,WAAW,KAAM9P,KAAKqJ,IACpCrJ,KAAK+P,QAAQhQ,WAEfmF,QAAS,CACP+P,oCACEjV,KAAK+P,SAAU,IAAIW,GAAgBC,KAAK3Q,KAAK6F,IAAK7F,KAAKkV,SAAUlV,KAAKmU,WAAYnU,KAAKoU,SACrE,CAAC,UAAW,QAAS,QAAS,YAAa,YAAa,SAAU,WAAY,WAAY,UAClG1V,kBAAQiH,GAChBI,GAAS/F,EAAM2F,EAAM3F,EAAK+P,aAG9BiF,0BACEhV,KAAKiV,gBACLjV,KAAKwP,SAASM,WAAW9P,KAAK+P,QAAS/P,KAAKqJ,KAE9C6L,oBACMlV,KAAKiU,QAAQjU,KAAKiU,SACtBjU,KAAKmV,MAAM,YAGfjV,kBAAW,MAAO,QC5CL,CACb0H,OAAQ,CAAC,YACToM,MAAO,CAAC,UACRpQ,MAAO,CACLuJ,KAAMnJ,OACNoR,KAAM,CACJvS,KAAMiJ,MACNhI,QAAS,CAAC,SAAU,SAAU,SAAU,SAAU,SAAU,WAE9DmQ,OAAQC,SACRC,WAAYD,SACZE,QAASF,SACT7K,GAAI,CAAExG,KAAMmB,OAAQF,QAAS,UAC7BuR,WAAYxR,QAEZ+N,gBAAiB,CAAE/O,KAAMgF,OAAQ/D,QAAS,MAE5CmE,8BACEjI,KAAKgV,iBACL5O,qBAAYpG,EAAKmN,OAAMnN,KAAKgV,gBAC5B5O,qBAAYpG,EAAKoV,OAAMpV,KAAKgV,iBAE9BvM,qBACEzI,KAAKwP,SAASM,WAAW,KAAM9P,KAAKqJ,IACpCrJ,KAAK+P,QAAQhQ,WAEfmF,QAAS,CACP+P,yBACEjV,KAAK+P,SAAU,IAAIuF,GAChBC,QAAQvV,KAAKmN,MACbwD,KAAK3Q,KAAKoV,KAAMpV,KAAKkV,SAAUlV,KAAKmU,WAAYnU,KAAKoU,UAE1DY,0BACEhV,KAAKiV,gBACLjV,KAAKwP,SAASM,WAAW9P,KAAK+P,QAAS/P,KAAKqJ,IACxCrJ,KAAKqV,aACPrV,KAAK+P,QAAQsE,QAAUmB,GACvBxV,KAAKwP,SAASI,QAAQ,kBAAmB5P,KAAK4R,mBAGlDsD,oBACMlV,KAAKiU,QAAQjU,KAAKiU,SACtBjU,KAAKmV,MAAM,YAGfjV,kBACE,MAAO,QC7CI,CACb+I,QAASC,GACTvF,KAAM,OACNC,MAAO,CACL8J,WAAY7J,QACZ4R,cAAe5R,QACf1B,QAAS+R,SACTtU,QAASsU,UAIX1P,mBACE,MAAO,CACLqF,KAAM7J,OAGV0E,mBACO1E,KAAK6J,MAAS7J,KAAK0V,SAAS1V,KAAK2V,YAExCzQ,QAAS,CACPyQ,+BACE3V,KAAK6J,KAAO,IAAI+L,GAAK5V,KAAKmK,SAAUnK,KAAKwP,UAEzC,CAAC,aAAc,iBAAiB9Q,kBAAQyJ,GACtCnI,EAAK6J,KAAK1B,GAAKnI,EAAKmI,GACpB/B,qBAAYpG,EAAKmI,iBAAYnI,EAAK6J,KAAK1B,GAAKnI,EAAKmI,SAG/CnI,KAAKmC,UACPnC,KAAK6J,KAAK1H,iBAAW0T,GAAW7V,EAAKmC,QAAQ,CAAE2T,UAAW9V,OAAM6V,KAChE7V,KAAKqE,MAAM0R,mBAAmB/V,KAAK6J,OAGjC7J,KAAKJ,UACPI,KAAK6J,KAAKjK,iBAAWgB,GAAQZ,EAAKJ,QAAQ,CAAEkW,UAAW9V,EAAMgW,MAAOpV,KACpEZ,KAAKqE,MAAM0R,mBAAmB/V,KAAK6J,OAGrC7J,KAAK6I,aAAa7I,KAAK6J,OAEzBK,qBAAYC,GACVnK,KAAKmK,SAAWA,EACZnK,KAAK6J,OAAM7J,KAAK6J,KAAKM,SAAWA,IAEtCuF,qBAAYF,GACVxP,KAAKwP,SAAWA,EACZxP,KAAK6J,OAAM7J,KAAK6J,KAAK2F,SAAWA,IAEtCnF,2BACElO,IAAMmO,EAAStK,KAAKmK,SACpBnK,KAAKgK,iBACLhK,KAAK6J,KAAKM,SAAWnK,KAAKmK,SAC1BG,EAAOvK,YAGX0I,qBACMzI,KAAK6J,MACP7J,KAAKqE,MAAM4R,sBAAsBjW,KAAK6J,MAGpC7J,KAAKmK,UAAUnK,KAAKmK,SAASpK,UAC7BC,KAAKwP,UAAUxP,KAAKwP,SAASzP,WAEnC0F,QAAS,WC/DI,CACbwD,QAAS2M,GACThS,MAAO,CACL3G,KAAM4K,OACN9K,MAAO,CAAE8F,KAAMgF,OAAQ/D,QAAS,GAChC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjC0G,MAAO,CAAE3H,KAAMgF,OAAQ/D,QAAS,GAChC2G,cAAe,CAAE5H,KAAMgF,OAAQ/D,QAAS,GACxC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,GACzC6G,cAAe,CAAE9H,KAAMgF,OAAQ/D,QAAS,IAE1CmE,8BACEjI,KAAKgK,iBAEL,CAAC,OAAQ,QAAS,SAAU,QAAS,gBAAiB,iBAAkB,iBAAiBtL,kBAAQiH,GAC/FS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACMhK,KAAK/C,KACP+C,KAAKmK,SAAW,IAAI+L,GAAkBlW,KAAK/C,KAAM+C,KAAK/C,KAAM+C,KAAK/C,MAEjE+C,KAAKmK,SAAW,IAAI+L,GAAkBlW,KAAKjD,MAAOiD,KAAKhD,OAAQgD,KAAKwK,SAI1E/E,QAAS,UC7BI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjCkH,SAAU,CAAEnI,KAAMgF,OAAQ/D,QAAS,GACnCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C6E,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,WAAY,aAAc,eAC7CtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIgM,GAAqBnW,KAAK+K,OAAQ/K,KAAKgL,SAAUhL,KAAKiL,WAAYjL,KAAKkL,eAG/FzF,QAAS,aCvBI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjCsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,GACzCuH,UAAW,CAAExI,KAAMgB,QAASC,SAAS,GACrCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C6E,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,SAAU,iBAAkB,iBAAkB,YAAa,aAAc,eAC5FtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIiM,GAAmBpW,KAAK+K,OAAQ/K,KAAKhD,OAAQgD,KAAKoL,eAAgBpL,KAAK0K,eAAgB1K,KAAKqL,UAAWrL,KAAKiL,WAAYjL,KAAKkL,eAGrJzF,QAAS,WC1BI,CACbwD,QAAS2M,GACThS,MAAO,CACL2H,UAAW,CAAE1I,KAAMgF,OAAQ/D,QAAS,GACpC0H,aAAc,CAAE3I,KAAMgF,OAAQ/D,QAAS,GACvC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjCsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,GACzCuH,UAAW,CAAExI,KAAMgB,QAASC,SAAS,GACrCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C6E,8BACEjI,KAAKgK,iBAEc,CAAC,YAAa,eAAgB,SAAU,iBAAkB,iBAAkB,YAAa,aAAc,eAC/GtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIkM,GAAuBrW,KAAKuL,UAAWvL,KAAKwL,aAAcxL,KAAKhD,OAAQgD,KAAKoL,eAAgBpL,KAAK0K,eAAgB1K,KAAKqL,UAAWrL,KAAKiL,WAAYjL,KAAKkL,eAG/KzF,QAAS,eC3BI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCmE,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,UACnBtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAImM,GAA2BtW,KAAK+K,OAAQ/K,KAAK0L,UAGrEjG,QAAS,mBCrBI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCmE,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,UACnBtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIoM,GAA0BvW,KAAK+K,OAAQ/K,KAAK0L,UAGpEjG,QAAS,kBCrBI,CACbwD,QAAS2M,GACThS,MAAO,CACLiI,OAAQC,MACRd,SAAU,CAAEnI,KAAMgF,OAAQ/D,QAAS,IACnCiI,SAAU,CAAElJ,KAAMgF,OAAQ/D,QAAS,GACnCkI,UAAW,CAAEnJ,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE3C6E,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,WAAY,WAAY,aAC3CtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIqM,GAAoBxW,KAAK6L,OAAQ7L,KAAKgL,SAAUhL,KAAK+L,SAAU/L,KAAKgM,aAG5FvG,QAAS,YCvBI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCmE,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,UACnBtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIsM,GAAyBzW,KAAK+K,OAAQ/K,KAAK0L,UAGnEjG,QAAS,iBCrBI,CACbwD,QAAS2M,GACThS,MAAO,CACL7G,MAAO,CAAE8F,KAAMgF,OAAQ/D,QAAS,GAChC9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjC2G,cAAe,CAAE5H,KAAMgF,OAAQ/D,QAAS,GACxC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,IAE3CmE,8BACEjI,KAAKgK,iBAEc,CAAC,QAAS,SAAU,gBAAiB,kBAC7CtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIuM,GAAoB1W,KAAKjD,MAAOiD,KAAKhD,OAAQgD,KAAKyK,cAAezK,KAAK0K,kBAG9FjF,QAAS,YCvBI,CACbwD,QAAS2M,GACThS,MAAO,CACLuI,SAAUL,MACVM,QAASN,MACTf,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCmE,8BACEjI,KAAKgK,iBAEc,CAAC,WAAY,UAAW,SAAU,UAC1CtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIwM,GAAyB3W,KAAKmM,SAAUnM,KAAKoM,QAASpM,KAAK+K,OAAQ/K,KAAK0L,UAGhGjG,QAAS,iBCvBI,CACbwD,QAAS2M,GACThS,MAAO,CACL0I,YAAa,CAAEzJ,KAAMgF,OAAQ/D,QAAS,IACtCyI,YAAa,CAAE1J,KAAMgF,OAAQ/D,QAAS,GACtC0I,cAAe,CAAE3J,KAAMgF,OAAQ/D,QAAS,GACxC2I,YAAa,CAAE5J,KAAMgF,OAAQ/D,QAAS,GACtCmH,WAAY,CAAEpI,KAAMgF,OAAQ/D,QAAS,GACrCoH,YAAa,CAAErI,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAE7C6E,8BACEjI,KAAKgK,iBAEc,CAAC,cAAe,cAAe,gBAAiB,cAAe,aAAc,eACrFtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIyM,GAAmB5W,KAAKsM,YAAatM,KAAKuM,YAAavM,KAAKwM,cAAexM,KAAKyM,YAAazM,KAAKiL,WAAYjL,KAAKkL,eAG3IzF,QAAS,WC1BI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQlD,OACR4C,cAAe,CAAE5H,KAAMgF,OAAQ/D,QAAS,IACxC4G,eAAgB,CAAE7H,KAAMgF,OAAQ/D,QAAS,KAE3CsC,MAAO,CACL2E,kBAAW/K,KAAKqK,mBAChBI,yBAAkBzK,KAAKqK,mBACvBK,0BAAmB1K,KAAKqK,oBAE1BpC,mBACEjI,KAAKgK,kBAEP9E,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI0M,GAAqB7W,KAAK+K,OAAQ/K,KAAKyK,cAAezK,KAAK0K,kBAGnFjF,QAAS,aCnBI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC4H,OAAQ,CAAE7I,KAAMgF,OAAQ/D,QAAS,IAEnCmE,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,UACnBtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI2M,GAA0B9W,KAAK+K,OAAQ/K,KAAK0L,UAGpEjG,QAAS,kBCzBI,CACbsR,KAAM/S,OACNgT,QAAShT,OACT/G,KAAM,CAAE4F,KAAMgF,OAAQ/D,QAAS,IAC/B9G,OAAQ,CAAE6F,KAAMgF,OAAQ/D,QAAS,GACjC0G,MAAO,CAAE3H,KAAMgF,OAAQ/D,QAAS,GAChCmT,cAAe,CAAEpU,KAAMgF,OAAQ/D,QAAS,IACxCoT,aAAc,CAAErU,KAAMgB,QAASC,SAAS,GACxCqT,eAAgB,CAAEtU,KAAMgF,OAAQ/D,QAAS,IACzCsT,UAAW,CAAEvU,KAAMgF,OAAQ/D,QAAS,GACpCuT,YAAa,CAAExU,KAAMgF,OAAQ/D,QAAS,GACtCwT,cAAe,CAAEzU,KAAMgF,OAAQ/D,QAAS,GACxCyT,MAAO,CAAE1U,KAAM,CAACgB,QAASG,QAASF,SAAS,OCP9B,CACbmF,QAAS2M,GACThS,MAAOpF,iBACFgZ,IAELC,gBACE,MAAO,CACL/B,SAAS,IAGbzN,8BAEqB,CACjB,OAAQ,OAAQ,SAAU,gBAC1B,eAAgB,iBAAkB,YAAa,cAAe,gBAC9D,SAESvJ,kBAAQyJ,GACjB/B,qBAAYpG,EAAKmI,iBACXnI,EAAK0X,MAAM1X,EAAKqK,yBAIT,IAAIsN,IACZhH,KAAK3Q,KAAKgX,kBAAUU,GACzB1X,EAAK0V,SAAU,EACf1V,EAAK0X,KAAOA,EACZ1X,EAAKgK,iBACLhK,EAAK2V,eAGTzQ,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIyN,GAAmB5X,KAAK+W,KAAM,CAChDW,KAAM1X,KAAK0X,KACXza,KAAM+C,KAAK/C,KACXD,OAAQgD,KAAKhD,OACbwN,MAAOxK,KAAKwK,MACZyM,cAAejX,KAAKiX,cACpBC,aAAclX,KAAKkX,aACnBC,eAAgBnX,KAAKmX,eACrBC,UAAWpX,KAAKoX,UAChBC,YAAarX,KAAKqX,YAClBC,cAAetX,KAAKsX,gBAGH,WAAftX,KAAKuX,OACPvX,KAAKmK,SAAS4K,eChDP,CACb9L,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,IACjC+I,KAAM,CAAEhK,KAAMgF,OAAQ/D,QAAS,IAC/BsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzCgJ,gBAAiB,CAAEjK,KAAMgF,OAAQ/D,QAAS,GAC1CiJ,IAAK,CAAElK,KAAMgF,OAAQ/D,QAAmB,EAAVX,KAAKC,KAErC6E,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,OAAQ,iBAAkB,kBAAmB,OAChEtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI0N,GAAoB7X,KAAK+K,OAAQ/K,KAAK6M,KAAM7M,KAAKoL,eAAgBpL,KAAK8M,gBAAiB9M,KAAK+M,OAGpHtH,QAAS,YCxBI,CACbwD,QAAS2M,GACThS,MAAO,CACLmH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,IACjC+I,KAAM,CAAEhK,KAAMgF,OAAQ/D,QAAS,IAC/BgJ,gBAAiB,CAAEjK,KAAMgF,OAAQ/D,QAAS,IAC1CsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzCqE,EAAG,CAAEtF,KAAMgF,OAAQ/D,QAAS,GAC5BmJ,EAAG,CAAEpK,KAAMgF,OAAQ/D,QAAS,IAE9BmE,8BACEjI,KAAKgK,iBAEc,CAAC,SAAU,OAAQ,iBAAkB,kBAAmB,IAAK,KACrEtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,iBACf3F,EAAKqK,yBAIXnF,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAI2N,GAAwB9X,KAAK+K,OAAQ/K,KAAK6M,KAAM7M,KAAK8M,gBAAiB9M,KAAKoL,eAAgBpL,KAAKmI,EAAGnI,KAAKiN,KAGhIxH,QAAS,gBCzBI,CACbwD,QAAS2M,GACThS,MAAO,CACLuJ,KAAMC,EACNvB,OAAQC,MACRgB,gBAAiB,CAAEjK,KAAMgF,OAAQ/D,QAAS,IAC1CiH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjCsH,eAAgB,CAAEvI,KAAMgF,OAAQ/D,QAAS,GACzCwJ,OAAQ,CAAEzK,KAAMgB,QAASC,SAAS,IAEpCmE,8BACEjI,KAAKgK,iBACc,CAAC,kBAAmB,SAAU,iBAAkB,UACxDtL,kBAAQiH,GACjBS,qBAAYpG,EAAK2F,eAAQ2C,GACvBtI,EAAKqK,wBAGTjE,qBAAYpG,EAAK6L,qBACfkM,GAAyB/X,EAAKmK,SAAUnK,EAAK6L,YAGjD3G,QAAS,CACP8E,0BACE5H,IAAI4V,EACAhY,KAAK6L,OACPmM,EAAQ,IAAIC,GAAiBjY,KAAK6L,QACzB7L,KAAKmN,KACd6K,EAAQhY,KAAKmN,KAEbtO,QAAQC,MAAM,iCAEhBkB,KAAKmK,SAAW,IAAIoD,EAAayK,EAAOhY,KAAK8M,gBAAiB9M,KAAK+K,OAAQ/K,KAAKoL,eAAgBpL,KAAKsN,SAGvG4K,qBAAYrM,GACVkM,GAAyB/X,KAAKmK,SAAU0B,KAG5CpG,QAAS,QAGX,SAASsS,GAAyBlL,EAAMhB,GACtC1P,IAAM6b,EAAQ,IAAIC,GAAiBpM,KACyBgB,EAAKsL,wEAC3DC,EAASJ,EAAMK,oBAAoBvL,EAAiBQ,GAC1DT,EAAKyL,SAAWF,EAAOE,SACvBzL,EAAK0L,QAAUH,EAAOG,QACtB1L,EAAK2L,UAAYJ,EAAOI,UACxB3L,EAAKsL,WAAWhL,KAAO6K,EAOvB,IALA7b,IAGIsc,EAHEC,EAAS7L,EAAK8L,WAAWnV,SAASoV,MAClCC,EAAShM,EAAK8L,WAAW/W,OAAOgX,MAChChX,EAAS,IAAIjE,EAGV8C,EAAI,EAAGA,EAAIqM,EAAiBrM,IACnCqY,EAAcrY,GAOhB,SAASqY,EAAcrY,GACrBgY,EAAIT,EAAMe,WAAWtY,EAAIqM,EAAiB2L,GAG1C,IAFAtc,IAAM6c,EAAIZ,EAAOG,QAAQ9X,GACnBwY,EAAIb,EAAOI,UAAU/X,GAClByY,EAAI,EAAGA,GAAK9N,EAAgB8N,IAAK,CACxC/c,IAAMmM,EAAI4Q,EAAI9N,EAAiBjI,KAAKC,GAAK,EACnC+V,EAAMhW,KAAKgW,IAAI7Q,GACf8Q,GAAOjW,KAAKiW,IAAI9Q,GACtB1G,EAAOZ,EAAKoY,EAAMJ,EAAEhY,EAAImY,EAAMF,EAAEjY,EAChCY,EAAOT,EAAKiY,EAAMJ,EAAE7X,EAAIgY,EAAMF,EAAE9X,EAChCS,EAAO6B,EAAK2V,EAAMJ,EAAEvV,EAAI0V,EAAMF,EAAExV,EAChC7B,EAAOC,YACP1F,IAAMkd,EAAyC,GAAhC5Y,GAAK2K,EAAiB,GAAK8N,GAC1CL,EAAOQ,GAASzX,EAAOZ,EACvB6X,EAAOQ,EAAQ,GAAKzX,EAAOT,EAC3B0X,EAAOQ,EAAQ,GAAKzX,EAAO6B,EAC3BiV,EAAOW,GAASZ,EAAEzX,EAAI+J,EAASnJ,EAAOZ,EACtC0X,EAAOW,EAAQ,GAAKZ,EAAEtX,EAAI4J,EAASnJ,EAAOT,EAC1CuX,EAAOW,EAAQ,GAAKZ,EAAEhV,EAAIsH,EAASnJ,EAAO6B,GAvB9CqV,EAAchM,GAEdD,EAAK8L,WAAWnV,SAASqM,aAAc,EACvChD,EAAK8L,WAAW/W,OAAOiO,aAAc,ECtDvC,OAAe,CACb5G,QAAS2M,GACThS,MAAO,CACL0V,WAAY,CAAEzW,KAAMgF,OAAQ/D,QAAS,KACrCyV,eAAgB,CAAE1W,KAAMgF,OAAQ/D,QAAS,IACzC0V,cAAe,CAAE3W,KAAMgF,OAAQ/D,QAAS,KACxC2V,WAAY5V,SAEda,mBACE1E,KAAK0Z,UACD1Z,KAAKyZ,WAAYzZ,KAAKqE,MAAMe,eAAepF,KAAK2Z,cAC/C3Z,KAAKyE,kBAAkBU,UAAUnF,KAAK2Z,eAE7ClR,qBACEzI,KAAKqE,MAAMuV,gBAAgB5Z,KAAK2Z,cAC5B3Z,KAAK6Z,UAAU7Z,KAAK+I,QAAQJ,OAAO3I,KAAK6Z,UACxC7Z,KAAK8Z,cAAc9Z,KAAK8Z,aAAa/Z,WAE3CmF,QAAS,CACPwU,mBACEvd,IAAM4d,EAAS,IAAIC,GAAsBha,KAAKsZ,WAAY,CAAE9R,OAAQyS,GAAWC,iBAAiB,EAAMtF,UAAWC,IACjH7U,KAAKma,WAAa,IAAIC,GAAWpa,KAAKuZ,eAAgBvZ,KAAKwZ,cAAeO,GAC1EhU,GAAS/F,KAAM,WAAYA,KAAKma,YAChCna,KAAK+I,QAAQC,IAAIhJ,KAAKma,YAEtBna,KAAKwP,SAASJ,KAAOC,EACrBrP,KAAKwP,SAAS6K,OAASN,EAAOhK,QAC9B/P,KAAKwP,SAAS+B,gBAAkB,GAChCvR,KAAKwP,SAASiC,UAAY,EAC1BzR,KAAKwP,SAASmC,UAAY,EAC1B3R,KAAKwP,SAASL,QAAU,IACxBnP,KAAKwP,SAASF,aAAc,EAC5BtP,KAAKwP,SAAS8K,oBAAqB,EACnCta,KAAKwP,SAASK,aAAc,EAE5B7P,KAAK8Z,aAAe9Z,KAAKwP,SAASkE,QAClC1T,KAAK8Z,aAAa1K,KAAOmL,GACzBva,KAAK8Z,aAAavI,gBAAkB,EACpCvR,KAAK8Z,aAAarI,UAAY,EAC9BzR,KAAK8Z,aAAanI,UAAY,EAC9B3R,KAAK8Z,aAAa3K,QAAU,GAE5BnP,KAAK6Z,SAAW,IAAIW,GAAMxa,KAAKmK,SAAUnK,KAAK8Z,cAE9C/T,GAAS/F,KAAM,WAAYA,KAAK6Z,UAChC9T,GAAS/F,KAAM,WAAYA,KAAK6Z,UAChC9T,GAAS/F,KAAM,QAASA,KAAK6Z,UAC7B7Z,KAAK+I,QAAQC,IAAIhJ,KAAK6Z,WAExBF,wBACE3Z,KAAK6J,KAAK4Q,SAAU,EACpBza,KAAK6Z,SAASY,SAAU,EACxBza,KAAKma,WAAWla,OAAOD,KAAKqE,MAAMnG,SAAU8B,KAAK1B,OACjD0B,KAAK6J,KAAK4Q,SAAU,EACpBza,KAAK6Z,SAASY,SAAU,IAG5BhV,QAAS,UCjEI,CACbuO,MAAO,CAAC,UACR/K,QAAS2M,GACThS,MAAO,CACLiC,IAAK7B,OACLjH,MAAO8K,OACP7K,OAAQ6K,OACR6S,SAAU7W,SAEZoE,8BACEjI,KAAKgK,iBACLhK,KAAKyP,iBACLzP,KAAK2V,WAELvP,qBAAYpG,EAAK6F,MAAK7F,KAAKgV,gBAE3B,CAAC,QAAS,UAAUtW,kBAAQyJ,GAC1B/B,qBAAYpG,EAAKmI,KAAInI,EAAKlD,WAGxBkD,KAAK0a,UAAU1a,KAAKqE,MAAMgB,cAAcrF,KAAKlD,SAEnDoI,QAAS,CACP8E,0BACEhK,KAAKmK,SAAW,IAAIuM,GAAoB,EAAG,EAAG,EAAG,IAEnDjH,0BACEzP,KAAKwP,SAAW,IAAIY,EAAkB,CAAEhB,KAAMuL,GAAYC,IAAK5a,KAAK6a,iBAEtEA,uBACE,OAAO,IAAInK,GAAgBC,KAAK3Q,KAAK6F,IAAK7F,KAAKkV,WAEjDF,0BACMhV,KAAK+P,SAAS/P,KAAK+P,QAAQhQ,UAC/BC,KAAKwP,SAASoL,IAAM5a,KAAK6a,cACzB7a,KAAKwP,SAASK,aAAc,GAE9BqF,kBAASnF,GACP/P,KAAK+P,QAAUA,EACf/P,KAAKlD,SACLkD,KAAKmV,MAAM,WAEbrY,kBACE,GAAKkD,KAAK+P,QAAV,CACA5T,IAIIyO,EAAGvH,EAJDyX,EAAS9a,KAAKqE,MAAMpH,KAGpB8d,EAFK/a,KAAK+P,QAAQiL,MAAMje,MACnBiD,KAAK+P,QAAQiL,MAAMhe,OAG1BgD,KAAKjD,OAASiD,KAAKhD,QACrB4N,EAAI5K,KAAKjD,MAAQ+d,EAAO5d,OAAS4d,EAAO/d,MACxCsG,EAAIrD,KAAKhD,OAAS8d,EAAO3d,QAAU2d,EAAO9d,QACjCgD,KAAKjD,MAEdsG,GADAuH,EAAI5K,KAAKjD,MAAQ+d,EAAO5d,OAAS4d,EAAO/d,OAChCge,EACC/a,KAAKhD,SAEd4N,GADAvH,EAAIrD,KAAKhD,OAAS8d,EAAO3d,QAAU2d,EAAO9d,QAClC+d,GAEV/a,KAAK6J,KAAKrB,MAAMxH,EAAI4J,EACpB5K,KAAK6J,KAAKrB,MAAMrH,EAAIkC,KAGxBoC,QAAS,YC/DI,CACbwD,QAASC,GACTtF,MAAO,CACL8J,WAAY7J,QACZ4R,cAAe5R,QACfoX,MAAOpT,QAETrD,mBACE,MAAO,CACLqF,KAAM7J,OAGVkb,uBACOlb,KAAKwF,OAAO1B,SACfjF,QAAQC,MAAM,qBAGlBmJ,mBACEjI,KAAK2V,YAEPzQ,QAAS,CACPyQ,+BACE3V,KAAK6J,KAAO,IAAIsR,GAAcnb,KAAKmK,SAAUnK,KAAKwP,SAAUxP,KAAKib,OAEjE,CAAC,aAAc,iBAAiBvc,kBAAQyJ,GACtCnI,EAAK6J,KAAK1B,GAAKnI,EAAKmI,GACpB/B,qBAAYpG,EAAKmI,iBAAYnI,EAAK6J,KAAK1B,GAAKnI,EAAKmI,SAGnDnI,KAAK6I,aAAa7I,KAAK6J,OAEzBK,qBAAYC,GACVnK,KAAKmK,SAAWA,EACZnK,KAAK6J,OAAM7J,KAAK6J,KAAKM,SAAWA,IAEtCuF,qBAAYF,GACVxP,KAAKwP,SAAWA,EACZxP,KAAK6J,OAAM7J,KAAK6J,KAAK2F,SAAWA,KAGxC/J,QAAS,oBCpCI,CACbwD,QAAS2M,GACThS,MAAO,CACL0V,WAAY,CAAEzW,KAAMgF,OAAQ/D,QAAS,KACrCyV,eAAgB,CAAE1W,KAAMgF,OAAQ/D,QAAS,IACzC0V,cAAe,CAAE3W,KAAMgF,OAAQ/D,QAAS,KACxC2V,WAAY5V,SAEda,mBACE1E,KAAKob,iBACDpb,KAAKyZ,WAAYzZ,KAAKqE,MAAMe,eAAepF,KAAK2Z,cAC/C3Z,KAAKyE,kBAAkBU,UAAUnF,KAAK2Z,eAE7ClR,qBACEzI,KAAKqE,MAAMuV,gBAAgB5Z,KAAK2Z,cAC5B3Z,KAAKma,YAAYna,KAAK+I,QAAQJ,OAAO3I,KAAKma,aAEhDjV,QAAS,CACPkW,0BACEjf,IAAM4d,EAAS,IAAIC,GAAsBha,KAAKsZ,WAAY,CAAE9R,OAAQyS,GAAWC,iBAAiB,EAAMtF,UAAWC,IACjH7U,KAAKma,WAAa,IAAIC,GAAWpa,KAAKuZ,eAAgBvZ,KAAKwZ,cAAeO,GAC1E/Z,KAAK+I,QAAQC,IAAIhJ,KAAKma,YAEtBna,KAAKwP,SAAS6K,OAASN,EAAOhK,QAC9B/P,KAAKwP,SAASK,aAAc,GAE9B8J,wBACE3Z,KAAK6J,KAAK4Q,SAAU,EACpBza,KAAKma,WAAWla,OAAOD,KAAKqE,MAAMnG,SAAU8B,KAAK1B,OACjD0B,KAAK6J,KAAK4Q,SAAU,IAGxBhV,QAAS,iBC9BI,CACbwD,QAAS2M,GACThS,MAAO,CACL0V,WAAY,CAAEzW,KAAMgF,OAAQ/D,QAAS,KACrCyV,eAAgB,CAAE1W,KAAMgF,OAAQ/D,QAAS,IACzC0V,cAAe,CAAE3W,KAAMgF,OAAQ/D,QAAS,KACxC8N,gBAAiB,CAAE/O,KAAMgF,OAAQ/D,QAAS,KAC1C2V,WAAY5V,SAEda,mBACE1E,KAAKob,iBACDpb,KAAKyZ,WAAYzZ,KAAKqE,MAAMe,eAAepF,KAAK2Z,cAC/C3Z,KAAKyE,kBAAkBU,UAAUnF,KAAK2Z,eAE7ClR,qBACEzI,KAAKqE,MAAMuV,gBAAgB5Z,KAAK2Z,cAC5B3Z,KAAKma,YAAYna,KAAK+I,QAAQJ,OAAO3I,KAAKma,aAEhDjV,QAAS,CACPkW,0BACEjf,IAAM4d,EAAS,IAAIC,GAAsBha,KAAKsZ,WAAY,CAAEjF,QAASmB,GAAuBhO,OAAQyS,GAAWC,iBAAiB,EAAMtF,UAAWC,IACjJ7U,KAAKma,WAAa,IAAIC,GAAWpa,KAAKuZ,eAAgBvZ,KAAKwZ,cAAeO,GAC1EhU,GAAS/F,KAAM,WAAYA,KAAKma,YAChCna,KAAK+I,QAAQC,IAAIhJ,KAAKma,YAEtBna,KAAKwP,SAAS6K,OAASN,EAAOhK,QAC9B/P,KAAKwP,SAASoC,gBAAkB5R,KAAK4R,gBACrC5R,KAAKwP,SAASK,aAAc,GAE9B8J,wBACE3Z,KAAK6J,KAAK4Q,SAAU,EACpBza,KAAKma,WAAWla,OAAOD,KAAKqE,MAAMnG,SAAU8B,KAAK1B,OACjD0B,KAAK6J,KAAK4Q,SAAU,IAGxBhV,QAAS,qBC1CI,CACbwD,QAASC,GACT8K,MAAO,CAAC,UACRpQ,MAAO,CACLiC,IAAK7B,QAEPyT,gBACE,MAAO,CACL/B,SAAS,IAGbzN,mBACEjI,KAAK+P,SAAU,IAAIW,GAAgBC,KAAK3Q,KAAK6F,IAAK7F,KAAKkV,UACvDlV,KAAKwP,SAAW,IAAI6L,GAAe,CAAET,IAAK5a,KAAK+P,UAC/C/P,KAAKsb,OAAS,IAAIC,GAAOvb,KAAKwP,UAC9BxP,KAAKmK,SAAWnK,KAAKsb,OAAOnR,SAC5BnK,KAAK6I,aAAa7I,KAAKsb,SAEzB7S,qBACEzI,KAAK+P,QAAQhQ,UACbC,KAAKwP,SAASzP,WAEhBmF,QAAS,CACPgQ,oBACElV,KAAK0V,SAAU,EACf1V,KAAKwb,WACLxb,KAAKmV,MAAM,WAEbqG,oBACExb,KAAKyb,OAASzb,KAAK+P,QAAQiL,MAAMje,MACjCiD,KAAK0b,QAAU1b,KAAK+P,QAAQiL,MAAMhe,OAClCgD,KAAK+a,OAAS/a,KAAKyb,OAASzb,KAAK0b,QAEjCtZ,IAAIpB,EAAI,GAAKG,EAAI,GACbnB,KAAK+a,OAAS,EAChB5Z,EAAI,GAAMnB,KAAK+a,OAEf/Z,EAAI,GAAMhB,KAAK+a,OAGjB5e,IAAMwf,EAAY3b,KAAKmK,SAASwO,WAAWnV,SAASoV,MACpD+C,EAAU,IAAM3a,EAAG2a,EAAU,IAAMxa,EACnCwa,EAAU,GAAK3a,EAAG2a,EAAU,IAAMxa,EAClCwa,EAAU,IAAM3a,EAAG2a,EAAU,IAAMxa,EACnCwa,EAAU,KAAO3a,EAAG2a,EAAU,IAAMxa,EACpCnB,KAAKmK,SAASwO,WAAWnV,SAASqM,aAAc,IAGpDpK,QAAS,aChDI,CACbwD,QAASC,GACT8K,MAAO,CAAC,UACRpQ,MAAO,CACLiC,IAAK7B,QAEPiE,+BACiB,IAAI2T,IACZjL,KAAK3Q,KAAK6F,cAAMgW,GACrB7b,EAAKmV,MAAM,SAAU0G,GACrB7b,EAAK6I,aAAagT,EAAKvd,eCVd,CACb2K,QAASC,GACT8K,MAAO,CAAC,UACRpQ,MAAO,CACLiC,IAAK7B,QAEPiE,+BACiB,IAAI6T,IACZnL,KAAK3Q,KAAK6F,cAAMkW,GACrB/b,EAAKmV,MAAM,SAAU4G,GACrB/b,EAAK6I,aAAakT,WCXT,CACb3X,iBACE,MAAO,CACL4X,OAAQ,KAGZpU,OAAQ,CAAC,SACTpD,mBACE,MAAO,CACLwX,OAAQhc,KAAKgc,SAGjBtX,8BACE1E,KAAKqE,MAAM4X,wBACTjc,EAAKG,SAAW,IAAI+b,GAAelc,EAAKqE,MAAMnG,UAC9C8B,EAAKqE,MAAMnG,SAAS1B,WAAY,EAChCwD,EAAKgc,OAAOtd,kBAAQyd,GAClBnc,EAAKG,SAASic,QAAQD,MAExBnc,EAAKqE,MAAMlE,SAAWH,EAAKG,SAE3BH,EAAKlD,SACLkD,EAAKqE,MAAMgB,cAAcrF,EAAKlD,YAGlC2L,qBACEzI,KAAKqE,MAAMgY,eAAerc,KAAKlD,SAEjCoI,QAAS,CACPpI,kBACEkD,KAAKG,SAASb,QAAQU,KAAKqE,MAAMpH,KAAKF,MAAOiD,KAAKqE,MAAMpH,KAAKD,UAGjEkD,kBACE,OAAOF,KAAKwF,OAAO1B,WAErB2B,QAAS,qBCtCI,CACbmC,OAAQ,CAAC,QAAS,UAClBsT,uBACOlb,KAAKgc,QACRnd,QAAQC,MAAM,kCAGlB2J,qBACMzI,KAAKmc,KAAKpc,SAASC,KAAKmc,KAAKpc,WAEnCG,kBACE,MAAO,IAETuF,QAAS,iBCVI,CACbwD,QAASqT,GACT5X,mBACO1E,KAAKqE,MAAM/F,OACdO,QAAQC,MAAM,iBAEXkB,KAAKqE,MAAMlG,QACdU,QAAQC,MAAM,kBAEhB3C,IAAMggB,EAAO,IAAII,GAAWvc,KAAKqE,MAAM/F,MAAO0B,KAAKqE,MAAMlG,QACzD6B,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,GAEd1W,QAAS,iBCbI,CACbwD,QAASqT,GACT1Y,MAAO,CACL4Y,MAAO,CACL3Z,KAAMgF,OACN/D,QAAS,GAEX2Y,SAAU,CACR5Z,KAAMgF,OACN/D,QAAS,MAEX4Y,QAAS,CACP7Z,KAAMgF,OACN/D,QAAS,MAGbsC,MAAO,CACLoW,iBAAUxc,KAAKmc,KAAKnK,SAASwK,MAAM5d,MAAQoB,KAAKwc,OAChDC,oBAAazc,KAAKmc,KAAKnK,SAASyK,SAAS7d,MAAQoB,KAAKyc,UACtDC,mBAAY1c,KAAKmc,KAAKnK,SAAS0K,QAAQ9d,MAAQoB,KAAK0c,UAEtDhY,mBACO1E,KAAKqE,MAAM/F,OACdO,QAAQC,MAAM,iBAEXkB,KAAKqE,MAAMlG,QACdU,QAAQC,MAAM,kBAEhB3C,IAAMoC,EAAS,CACbie,MAAOxc,KAAKwc,MACZC,SAAUzc,KAAKyc,SACfC,QAAS1c,KAAK0c,QACd3f,MAAOiD,KAAKqE,MAAMpH,KAAKF,MACvBC,OAAQgD,KAAKqE,MAAMpH,KAAKD,QAEpBmf,EAAO,IAAIQ,GAAU3c,KAAKqE,MAAM/F,MAAO0B,KAAKqE,MAAMlG,OAAQI,GAChEyB,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,GAEd1W,QAAS,gBCvCI,CACbwD,QAASqT,GACT1Y,MAAO,CACLgZ,eAAgB,CACd/Z,KAAMgF,OACN/D,QAAS,IAEX+Y,mBAAoB,CAClBha,KAAMgF,OACN/D,QAAS,KAEXgZ,eAAgB,CACdja,KAAMgF,OACN/D,QAAS,MAEXiZ,UAAW,CACTla,KAAMgF,OACN/D,QAAS,IAGbsC,MAAO,CACLwW,0BAAmB5c,KAAKmc,KAAKnK,SAASgL,WAAWpe,MAAQoB,KAAK4c,gBAC9DC,8BAAuB7c,KAAKmc,KAAKnK,SAASiL,WAAWre,MAAQoB,KAAK6c,oBAClEC,0BAAmB9c,KAAKmc,KAAKnK,SAASkL,OAAOte,MAAQoB,KAAK8c,gBAC1DC,qBAAc/c,KAAKmc,KAAKnK,SAAS+K,UAAUne,MAAQoB,KAAK+c,YAE1DrY,mBACEvI,IAAMggB,EAAO,IAAIgB,GAASnd,KAAK4c,eAAgB5c,KAAK6c,mBAAoB7c,KAAK8c,eAAgB9c,KAAK+c,WAClG/c,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,GAEd1W,QAAS,eC9BI,CACbwD,QAASqT,GACT5X,mBACEvI,IAAMggB,EAAO,IAAIiB,GAAWC,IAC5Brd,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,EAGZnc,KAAKqE,MAAMgB,cAAcrF,KAAKlD,SAEhC2L,qBACEzI,KAAKqE,MAAMgY,eAAerc,KAAKlD,SAEjCoI,QAAS,CACPpI,wBACyBkD,KAAKmc,KAAK3M,SAASwC,oBAC1CsL,EAAW1e,MAAMoC,EAAI,EAAIhB,KAAKqE,MAAMpH,KAAKF,MACzCugB,EAAW1e,MAAMuC,EAAI,EAAInB,KAAKqE,MAAMpH,KAAKD,SAG7CyI,QAAS,eCpBI,CACbwD,QAASqT,GACT1Y,MAAO,CACL2Z,MAAO,CAAE1a,KAAMgF,OAAQ/D,QAAS,GAChCiH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjC0Z,QAAS,CAAE3a,KAAMgF,OAAQ/D,QAASX,KAAKC,GAAK,GAAK,GACjDqa,QAAS,CAAE5a,KAAMgF,OAAQ/D,QAASX,KAAKC,GAAK,GAAK,GACjDsa,QAAS,CAAE7a,KAAMgF,OAAQ/D,QAASX,KAAKC,GAAK,GAAK,GACjDua,QAAS,CAAE9a,KAAMgF,OAAQ/D,QAAS,IAEpCY,8BACQyX,EAAO,IAAIyB,GAAa5d,KAAKqE,MAAMpH,KAAKF,MAAOiD,KAAKqE,MAAMpH,KAAKD,OAAQ,IAE7E,CAAC,QAAS,SAAU,UAAW,UAAW,UAAW,WAAW0B,kBAAQyJ,GACtEgU,EAAKnK,SAAS7J,GAAGvJ,MAAQoB,EAAKmI,GAC9B/B,qBAAYpG,EAAKmI,iBACfgU,EAAKnK,SAAS7J,GAAGvJ,MAAQoB,EAAKmI,SAIlCnI,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,GAEd1W,QAAS,mBCxBI,CACbwD,QAASqT,GACT5X,mBAEEvI,IAAMggB,EAAO,IAAI0B,GAAS7d,KAAKqE,MAAMpH,KAAKF,MAAOiD,KAAKqE,MAAMpH,KAAKD,QACjEgD,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,GAEd1W,QAAS,eCTK,2JCED,CACbuM,SAAU,CACR8L,SAAU,CAAElf,MAAO,MACnBmf,WAAY,CAAEnf,MAAO,GACrBof,eAAgB,CAAEpf,MAAO,GACzBqf,MAAO,CAAErf,MAAO,IAAInB,GACpBygB,IAAK,CAAEtf,MAAO,IAAInB,GAClB0gB,MAAO,CAAEvf,MAAO,IAAInB,GACpB2gB,QAAS,CAAExf,MAAO,IAAInB,IAExBwU,aAAcoM,GACdnM,eAAgB,mjDCRH,CACbjJ,QAASqT,GACT1Y,MAAO,CACLma,WAAY,CAAElb,KAAMgF,OAAQ/D,QAAS,IACrCka,eAAgB,CAAEnb,KAAMgF,OAAQ/D,QAAS,KACzCma,MAAO,CAAEpb,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,EAAGG,EAAG,MAC3C+c,IAAK,CAAErb,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,GAAIG,EAAG,OAE5CuD,8BACE1E,KAAKmc,KAAO,IAAIiB,GAAWkB,IAC3Bte,KAAKgc,OAAO3b,KAAKL,KAAKmc,MAEtBnc,KAAKue,MAAQ,IAAInB,GAAWkB,IAC5Bte,KAAKgc,OAAO3b,KAAKL,KAAKue,OAEtBpiB,IAAM6V,EAAWhS,KAAKgS,SAAWhS,KAAKmc,KAAKnK,SACrCwM,EAAYxe,KAAKwe,UAAYxe,KAAKue,MAAMvM,SAC9CwM,EAAUT,WAAa/L,EAAS+L,WAChCS,EAAUR,eAAiBhM,EAASgM,eACpCQ,EAAUP,MAAQjM,EAASiM,MAC3BO,EAAUN,IAAMlM,EAASkM,IACzBM,EAAUJ,QAAUpM,EAASoM,QAE7BrY,GAAS/F,KAAM,aAAcgS,EAAS+L,WAAY,SAClDhY,GAAS/F,KAAM,iBAAkBgS,EAASgM,eAAgB,SAE1Dhe,KAAKye,kBACL,CAAC,QAAS,OAAO/f,kBAAQyJ,GACvB/B,qBAAYpG,EAAKmI,KAAInI,EAAKye,gBAAiB,CAAEpY,MAAM,OAGrDrG,KAAKmc,KAAK7c,iBAAWvC,EAAOC,GAC1BgV,EAASoM,QAAQxf,MAAM6K,IAAI1M,EAAOC,KAGtCkI,QAAS,CACPuZ,2BACEze,KAAKgS,SAASiM,MAAMrf,MAAM8f,KAAK1e,KAAKie,OACpCje,KAAKgS,SAASkM,IAAItf,MAAM8f,KAAK1e,KAAKke,KAClC/hB,IAAMwiB,GAAK,IAAIlhB,GAAUihB,KAAK1e,KAAKke,KAAKU,IAAI5e,KAAKie,OAAOpc,YACxD7B,KAAKgS,SAASmM,MAAMvf,MAAM8f,KAAKC,GAC/B3e,KAAKwe,UAAUL,MAAMvf,MAAM6K,KAAKkV,EAAGxd,EAAGwd,EAAG3d,KAG7CyE,QAAS,oBC/CI,CACbwD,QAASqT,GACT1Y,MAAO,CACLib,SAAU,CAAEhc,KAAMgF,OAAQ/D,QAAS,KACnCiH,OAAQ,CAAElI,KAAMgF,OAAQ/D,QAAS,GACjCgb,UAAW,CAAEjc,KAAMgF,OAAQ/D,QAAS,IAEtCsC,MAAO,CACLyY,oBAAa7e,KAAKmc,KAAK0C,SAAW7e,KAAK6e,UACvC9T,kBAAW/K,KAAKmc,KAAKpR,OAAS/K,KAAK+K,QACnC+T,qBAAc9e,KAAKmc,KAAK2C,UAAY9e,KAAK8e,YAE3Cpa,mBACEvI,IAAMc,EAAO,IAAIQ,EAAQuC,KAAKqE,MAAMpH,KAAKF,MAAOiD,KAAKqE,MAAMpH,KAAKD,QAC1Dmf,EAAO,IAAI4C,GAAgB9hB,EAAM+C,KAAK6e,SAAU7e,KAAK+K,OAAQ/K,KAAK8e,WACxE9e,KAAKgc,OAAO3b,KAAK8b,GACjBnc,KAAKmc,KAAOA,GAEd1W,QAAS,sBClBI,CACbuM,SAAU,CACR8L,SAAU,CAAElf,MAAO,MACnBmW,OAAQ,CAAEnW,MAAO,IAAInB,EAAQ,GAAK,KAClCohB,SAAU,CAAEjgB,MAAO,IAErBqT,aAAcoM,GACdnM,eAAgB,2pCCNH,CACbjJ,QAASqT,GACT1Y,MAAO,CACLmR,OAAQ,CAAElS,KAAMrE,OAAQsF,QAAS,CAAE9C,EAAG,GAAKG,EAAG,KAC9C0d,SAAU,CAAEhc,KAAMgF,OAAQ/D,QAAS,KAErCY,mBACE1E,KAAKmc,KAAO,IAAIiB,GAAW4B,IAC3Bhf,KAAKgc,OAAO3b,KAAKL,KAAKmc,MAEtBhgB,IAAM6V,EAAWhS,KAAKgS,SAAWhS,KAAKmc,KAAKnK,SAC3CjM,GAAS/F,KAAM,SAAUgS,EAAS+C,OAAQ,SAC1ChP,GAAS/F,KAAM,WAAYgS,EAAS6M,SAAU,UAEhDpZ,QAAS,gyCChBEwZ,GAAmB,CAC9BC,iBAAUC,GACM,CACZ,SACA,qBACA,oBACA,WACA,QACA,QAEA,eACA,mBACA,kBACA,aACA,gBACA,YAEA,gBACA,kBACA,iBACA,gBACA,mBACA,iBACA,mBACA,qBACA,eAEA,UACA,cAEA,OAEA,MAAO,cACP,SAAU,iBACV,OAAQ,eACR,WAAY,mBACZ,eAAgB,uBAChB,cAAe,sBACf,QAAS,gBACT,aAAc,qBACd,QACA,aAAc,qBACd,OAAQ,eACR,SAAU,iBACV,cAAe,sBACf,OACA,QAAS,gBACT,YAAa,oBACb,OAAQ,eAER,MACA,QACA,gBACA,aACA,iBACA,SAEA,WACA,YAEA,YACA,iBACA,WACA,WACA,eACA,aACA,UACA,WACA,gBACA,kBACA,eAEA,cAGIzgB,kBAAQ0gB,GACZD,EAAIrJ,UAAUsJ,EAAMC,GAAMD,SAKzB,SAASE,GAAU/gB,GACxB,OAAOghB,EAAWhhB,GAAQihB,IAAIP"}