ohzi-core 11.0.0 → 11.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.js","sources":["../src/BaseApplication.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/BaseShaderMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/render_mode/BaseRender.js","../src/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.js","../src/view_components/ViewManager.js","../src/view_components/ViewState.js","../src/view_components/ApplicationView.js","../src/action_sequencer/ActionEvent.js","../src/utilities/OMath.js","../src/action_sequencer/ActionSequencer.js","../src/utilities/EasingFunctions.js","../src/action_sequencer/ActionInterpolator.js","../src/action_sequencer/NumberInterpolator.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewControllerManager.js","../src/view_components/VCManager.js","../src/view_components/WorkerToMain.js","../src/view_components/ApplicationViewController.js","../src/CameraManager.js","../src/canvas_drawer/CanvasDrawer.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/Capabilities.js","../src/components/AxisHelper.js","../src/SceneManager.js","../src/primitives/Cube.js","../src/primitives/Sphere.js","../src/primitives/Arrow.js","../src/OScreen.js","../src/materials/ScreenSpaceTextureMaterial.js","../src/PerspectiveCamera.js","../src/Debug.js","../src/EventManager.js","../src/render_utilities/Blitter.js","../src/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/Graphics.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/ResourceContainer.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/KeyboardInput.js","../src/OrthographicCamera.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/SSAOMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/render_mode/VRRender.js","../src/view_components/ViewComponentControllerManager.js","../src/RenderLoop.js","../src/view_components/ViewComponentManager.js","../src/view_components/ViewComponent.js","../src/view_components/ViewComponentController.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/HTMLUtilities.js","../src/utilities/ImageUtilities.js","../src/utilities/MeshSampler.js","../src/utilities/ModelUtilities.js","../src/utilities/ObjectUtilities.js","../src/utilities/StringUtilities.js","../src/utilities/TimeUtilities.js","../src/components/Grid.js","../src/components/Line.js","../src/components/WorldImage.js","../src/components/Text2D.js","../src/materials/UIElementMaterial.js","../src/ui/ui_element_position/ScreenSpacePosition.js","../src/ui/ui_element_position/WorldSpacePosition.js","../src/ui/ui_element_state/UIElementState.js","../src/ui/ui_element_state/OnIdle.js","../src/ui/ui_element_state/OnMouseEnter.js","../src/ui/ui_element_state/OnMouseExit.js","../src/ui/ui_element_state/OnMouseHover.js","../src/components/UIElement.js","../src/components/UpdatableMaterialMesh.js","../src/components/sdf_text/TextGlyph.js","../src/components/sdf_text/SDFText.js","../src/materials/SDFTextMaterial.js","../src/components/sdf_text/SDFTextBatch.js","../src/action_sequencer/VectorInterpolator.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.js","../src/materials/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/gpu_particles/ParticleAttribute.js","../src/gpu_particles/GPUParticleSystem.js","../src/materials/gpu_particles/ParticleStorageMaterial.js","../src/gpu_particles/ParticlePositionAttribute.js","../src/data_textures/CustomDataTexture.js","../src/data_textures/RGBDataTexture.js","../src/data_textures/RGBADataTexture.js","../src/data_textures/RGBFloatDataTexture.js","../src/data_textures/RGBAFloatDataTexture.js","../src/static_batcher/BatchedMesh.js","../src/static_batcher/MeshBatcher.js","../src/resource_loader/AsyncTextureLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/RGBETextureLoader.js","../src/resource_loader/TextLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n\n dispose()\n {}\n}\n\nexport { BaseApplication };\n","import vert from '../shaders/copy/copy.vert';\nimport frag from '../shaders/copy/copy.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Vector2 } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass BlitMaterial extends ShaderMaterial\n{\n constructor(frag_shader, vert_shader, defines)\n {\n super({\n uniforms: {\n _MainTex: { value: null },\n _Resolution: { value: new Vector2(0, 0) },\n _TargetResolution: { value: new Vector2(0, 0) }\n },\n defines: defines || {},\n vertexShader: vert_shader || vert,\n fragmentShader: frag_shader || frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { BlitMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/add/add.frag';\n\nclass AddMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag);\n\n this.uniforms._SecondTex = { value: undefined };\n }\n\n set_add_texture(tex)\n {\n this.uniforms._SecondTex.value = tex;\n }\n}\n\nexport { AddMaterial };\n","import basic_vert from '../shaders/basic_color/basic_color.vert';\nimport basic_frag from '../shaders/basic_color/basic_color.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass BaseShaderMaterial extends ShaderMaterial\n{\n constructor(vert, frag, uniforms)\n {\n super({\n vertexShader: vert || basic_vert,\n fragmentShader: frag || basic_frag,\n uniforms: uniforms || {\n _Color: { value: new Color('#FF0000') }\n }\n });\n }\n}\n\nexport { BaseShaderMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/unreal_bloom_compose.frag';\n\nimport { Color } from 'three';\nclass UnrealBloomComposeMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag, undefined, {\n NUM_MIPS: nMips\n });\n this.uniforms._MainTex = { value: undefined };\n this.uniforms._BlurredTex = { value: undefined };\n this.uniforms._BloomStrength = { value: 1 };\n\n this.uniforms.blurTexture1 = { value: null };\n this.uniforms.blurTexture2 = { value: null };\n this.uniforms.blurTexture3 = { value: null };\n this.uniforms.blurTexture4 = { value: null };\n this.uniforms.blurTexture5 = { value: null };\n\n this.uniforms.bloomStrength = { value: 1.0 };\n this.uniforms.bloomFactors = { value: [1.0, 0.8, 0.6, 0.4, 0.2] };\n this.uniforms.bloomRadius = { value: 0.0 };\n\n const bloomTintColors = [\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF')\n ];\n\n this.uniforms.bloomTintColors = { value: bloomTintColors };\n }\n\n set_RT_0(rt)\n {\n this.uniforms.blurTexture1.value = rt;\n }\n\n set_RT_1(rt)\n {\n this.uniforms.blurTexture2.value = rt;\n }\n\n set_RT_2(rt)\n {\n this.uniforms.blurTexture3.value = rt;\n }\n\n set_RT_3(rt)\n {\n this.uniforms.blurTexture4.value = rt;\n }\n\n set_RT_4(rt)\n {\n this.uniforms.blurTexture5.value = rt;\n }\n\n set_bloom_strength(value)\n {\n this.uniforms.bloomStrength.value = value;\n }\n\n set_bloom_radius(value)\n {\n this.uniforms.bloomRadius.value = value;\n }\n\n set_tint_color_0(col_string)\n {\n this.uniforms.bloomTintColors.value[0].set(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.uniforms.bloomTintColors.value[1].set(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.uniforms.bloomTintColors.value[2].set(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.uniforms.bloomTintColors.value[3].set(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.uniforms.bloomTintColors.value[4].set(col_string);\n }\n}\n\nexport { UnrealBloomComposeMaterial };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","\nclass Browser\n{\n init(opr, chrome)\n {\n this.browser_name = '';\n this.agent = navigator.userAgent.toLowerCase();\n\n // vr specific\n this.vr_browser_keywords = ['oculusbrowser', 'oculus', 'vive', 'rift', 'windowsmr', 'cardboard', 'daydream', 'wolvic'];\n this.vr_browser_name = this.vr_browser_keywords.find(keyword => this.agent.includes(keyword));\n // Check for WebXR support (indicating VR capabilities)\n this.has_web_xr_support = 'xr' in navigator;\n\n switch (true)\n {\n case this.vr_browser_name !== undefined && this.has_web_xr_support:\n this.browser_name = this.vr_browser_name;\n break;\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n case this.agent.indexOf('opr') > -1 && !!opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get is_vr()\n {\n return this.vr_browser_keywords.includes(this.browser_name);\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = '';\n let version = 0;\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","class Validation\n{\n constructor()\n {}\n\n static is_int(n)\n {\n return Number(n) === n && n % 1 === 0;\n }\n\n static is_float(n)\n {\n return Number(n) === n && n % 1 !== 0;\n }\n\n static is_number(n)\n {\n return this.is_int(n) || this.is_float(n);\n }\n\n static is_json(str)\n {\n try\n {\n JSON.parse(str);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n}\n\nexport { Validation };\n","import { Browser } from '../Browser';\r\nimport { Validation } from '../utilities/Validation';\r\n\r\nclass AbstractLoader\r\n{\r\n constructor(resource_id, url, size = 1)\r\n {\r\n this.resource_id = resource_id;\r\n this.url = url;\r\n this.loaded_bytes = 0;\r\n this.total_bytes = size;\r\n\r\n this.has_finished = false;\r\n this.has_error = false;\r\n this.error_message = 'none';\r\n }\r\n\r\n __update_downloaded_bytes(loaded, total)\r\n {\r\n loaded = Validation.is_number(loaded) ? loaded : 1;\r\n total = Validation.is_number(total) ? total : 1;\r\n\r\n this.loaded_bytes = loaded;\r\n\r\n if (total > 0)\r\n {\r\n this.total_bytes = total;\r\n }\r\n\r\n if (this.loaded_bytes > this.total_bytes)\r\n {\r\n console.warn('Total bytes is smaller than loaded ones. Please set total bytes by hand to:', this.url);\r\n }\r\n }\r\n\r\n __loading_ended()\r\n {\r\n this.has_finished = true;\r\n }\r\n\r\n __set_error(message)\r\n {\r\n this.has_error = true;\r\n this.error_message = message;\r\n }\r\n\r\n print_error()\r\n {\r\n console.error('Error while loading ' + this.resource_id + '\\n\\t path: ' + this.url + '\\n\\t\\t' + this.error_message);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const cache = Browser.is_safari ? 'no-cache' : 'default';\r\n\r\n fetch(this.url, {\r\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: cache, // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: 'same-origin', // include, *same-origin, omit\r\n redirect: 'follow' // manual, *follow, error\r\n })\r\n .then(this.on_progress.bind(this, resource_container))\r\n .catch(this.__on_error.bind(this));\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n async on_progress(resource_container, response)\r\n {\r\n const response_clone = response.clone();\r\n const reader = response.body.getReader();\r\n\r\n // Step 2: get total length\r\n const contentLength = +response.headers.get('Content-Length');\r\n\r\n // Step 3: read the data\r\n let receivedLength = 0; // received that many bytes at the moment\r\n\r\n while (true)\r\n {\r\n const { done, value } = await reader.read();\r\n\r\n if (done)\r\n {\r\n break;\r\n }\r\n\r\n receivedLength += value.length;\r\n\r\n this.__update_downloaded_bytes(receivedLength, contentLength);\r\n // console.log(`Received ${receivedLength} of ${contentLength}`);\r\n }\r\n\r\n this.on_preloaded_finished(resource_container, response_clone);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n }\r\n\r\n __on_error(data)\r\n {\r\n console.error(data);\r\n }\r\n}\r\n\r\nexport { AbstractLoader };\r\n","\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n this.main_to_worker = undefined;\n\n this.browser_title_suffix = '';\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n this.main_to_worker.post('go_to_view_controller', { view_controller_name: view_name, skip });\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const transition_view = this.get('transition');\n\n transition_view.set_next_view_name(scene_name);\n\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_by_url(url)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].url === url)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get_by_url] no view found for: ', url);\n return undefined;\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n set_main_to_worker(main_to_worker)\n {\n this.main_to_worker = main_to_worker;\n }\n\n __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n show()\n {\n }\n\n hide()\n {\n }\n\n before_enter()\n {\n }\n\n on_enter()\n {\n }\n\n before_update()\n {\n }\n\n update()\n {\n }\n\n fixed_update()\n {\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n before_exit()\n {\n }\n\n on_exit()\n {\n }\n}\n\nexport { ViewState };\n","import { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n ViewManager.register_view(this);\n }\n\n show()\n {\n this.container.classList.add('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n on_enter()\n {\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n before_exit()\n {\n this.container.classList.add('before_exit');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('hidden');\n }\n\n hide()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n set_opacity(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ApplicationView };\n","\nclass ActionEvent\n{\n constructor(name, method, args)\n {\n this.name = name;\n this.method = method;\n this.args = args;\n }\n\n trigger()\n {\n ViewApi.application[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","import { Vector3 } from 'three';\n\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = new Vector3();\n const points_on_plane = [];\n for (let i = 0; i < points.length; i++)\n {\n plane.projectPoint(points[i], projected_point);\n points_on_plane.push(projected_point.clone());\n }\n\n return points_on_plane;\n }\n\n static matrix4_lerp(from, to, target, t)\n {\n for (let i = 0; i < 16; i++)\n {\n target.elements[i] = this.lerp(from.elements[i], to.elements[i], t);\n }\n }\n\n static equals(x1, x2)\n {\n return Math.abs(x1 - x2) < 0.000001;\n }\n\n static lerp(x, y, t)\n {\n return (1 - t) * x + t * y;\n }\n\n static clamp(value, min, max)\n {\n return Math.max(min, Math.min(max, value));\n }\n\n static euclideanModulo(n, m)\n {\n return ((n % m) + m) % m;\n }\n\n static pingpong(x, length = 1)\n {\n return length - Math.abs(OMath.euclideanModulo(x, length * 2) - length);\n }\n\n static degToRad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static radToDeg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static deg_to_rad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static rad_to_deg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static perspective_divide(v)\n {\n v.x /= v.w;\n v.y /= v.w;\n v.z /= v.w;\n return v;\n }\n\n static points_average(points)\n {\n const center = points[0].clone();\n for (let i = 1; i < points.length; i++)\n {\n center.add(points[i]);\n }\n center.multiplyScalar(1 / points.length);\n return center;\n }\n\n static get_random_color()\n {\n const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];\n\n let col = '#';\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n return col;\n }\n\n static saturate(x)\n {\n return OMath.clamp(x, 0, 1);\n }\n}\n\nexport { OMath };\n","\nimport { OMath } from '../utilities/OMath';\n\nclass ActionSequencer\n{\n constructor(context = {}, transitions_velocity)\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed(transitions_velocity);\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed(transitions_velocity)\n {\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context, transitions_velocity)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context, transitions_velocity);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","import { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n\n this.transitions_velocity = 1;\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context, this.transitions_velocity);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context, this.transitions_velocity);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transitions_velocity = transitions_velocity;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","import { Time } from '../../Time';\nimport { ViewState } from '../ViewState';\n\nclass ViewStateTransitionHandler\n{\n constructor(transition_table)\n {\n this.last_state = new ViewState();\n this.current_state = new ViewState();\n\n this.default_state_data = {};\n this.current_state_data = {};\n\n this.transition_table = transition_table;\n\n this.transitioning = false;\n }\n\n go_to_state(state, skip = false)\n {\n if (this.transitioning)\n {\n this.__exit_last_state();\n }\n\n this.last_state = this.current_state;\n this.current_state = state;\n\n this.last_state.before_exit();\n this.current_state.show();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.current_state.before_enter();\n\n this.action_sequencer.play();\n\n this.transitioning = true;\n\n if (skip)\n {\n this.action_sequencer.skip();\n this.update();\n }\n }\n\n update()\n {\n if (this.transitioning)\n {\n this.__update_transitions();\n\n if (this.action_sequencer.is_finished())\n {\n this.transitioning = false;\n\n this.__update_transitions();\n\n this.__exit_last_state();\n\n this.current_state.on_enter();\n }\n }\n else\n {\n this.current_state.update();\n }\n }\n\n before_update()\n {\n this.current_state.before_update();\n }\n\n fixed_update()\n {\n this.current_state.fixed_update();\n }\n\n set_state(state)\n {\n this.current_state = state;\n }\n\n set_default_state_data(default_state_data)\n {\n Object.assign(this.default_state_data, default_state_data);\n Object.assign(this.current_state_data, default_state_data);\n }\n\n __update_transitions()\n {\n this.action_sequencer.update(Time.delta_time);\n this.last_state.update_exit_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n this.current_state.update_enter_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n }\n\n __exit_last_state()\n {\n if (this.last_state.name !== this.current_state.name)\n {\n this.last_state.hide();\n }\n\n this.last_state.on_exit();\n }\n}\n\nexport { ViewStateTransitionHandler };\n","import { TransitionTable } from './transition/TransitionTable';\nimport { ViewStateTransitionHandler } from './transition/ViewStateTransitionHandler';\n\nclass TransitionManager\n{\n constructor()\n {\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n }\n\n get action_sequencer()\n {\n return this.transition_handler.action_sequencer;\n }\n\n get current_state_data()\n {\n return this.transition_handler.current_state_data;\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n add_transitions(transitions)\n {\n this.transition_table.add_transitions(transitions);\n }\n\n set_transitions(transitions)\n {\n this.transition_table.set_transitions(transitions);\n }\n\n set_default_state_data(default_state_data)\n {\n this.transition_table.set_default_state_data(default_state_data);\n this.transition_handler.set_default_state_data(default_state_data);\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transition_table.set_transitions_velocity(transitions_velocity);\n }\n}\n\nconst transition_manager = new TransitionManager();\nexport { transition_manager as TransitionManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewControllerManager\n{\n constructor()\n {\n this.view_controllers = [];\n }\n\n go_to_view_controller(view_controller_name, skip = false)\n {\n const v = this.get(view_controller_name);\n TransitionManager.transition_handler.go_to_state(v, skip);\n }\n\n update()\n {\n this.__set_view_controllers_opacities();\n }\n\n register_view_controller(view_controller)\n {\n this.view_controllers.push(view_controller);\n }\n\n set_view_controller(view_controller_name)\n {\n const view_controller = this.get(view_controller_name);\n\n TransitionManager.transition_handler.set_state(view_controller);\n }\n\n get_current_view_controller()\n {\n return TransitionManager.transition_handler.current_state;\n }\n\n get(view_controller_name)\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n if (this.view_controllers[i].name === view_controller_name)\n {\n return this.view_controllers[i];\n }\n }\n console.error('[ViewControllerManager.get] no view controller found for: ', view_controller_name);\n return undefined;\n }\n\n // get_by_url(url)\n // {\n // for (let i = 0; i < this.view_controllers.length; i++)\n // {\n // if (this.view_controllers[i].url === url)\n // {\n // return this.view_controllers[i];\n // }\n // }\n // console.error('[ViewControllerManager.get_by_url] no view controller found for: ', url);\n // return undefined;\n // }\n\n __set_view_controllers_opacities()\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n this.view_controllers[i].set_opacity(TransitionManager.transition_handler.current_state_data);\n }\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nexport { ViewControllerManager };\n","import { ViewControllerManager } from './ViewControllerManager';\n\n// Formerly ViewControllerManager\nclass VCManager extends ViewControllerManager\n{\n}\n\nconst v_c_manager = new VCManager();\nexport { v_c_manager as VCManager };\n","\nclass WorkerToMain\n{\n constructor()\n {\n // TODO: Use SharedArrayBuffer?\n this.methods = [];\n this.args = [];\n }\n\n push(method, args = [])\n {\n this.methods.push(method);\n this.args.push(args);\n }\n\n clear()\n {\n this.methods = [];\n this.args = [];\n }\n}\n\nconst worker_to_main = new WorkerToMain();\nexport { worker_to_main as WorkerToMain };\n","import { TransitionManager } from './TransitionManager';\nimport { VCManager } from './VCManager';\nimport { ViewState } from './ViewState';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ApplicationViewController extends ViewState\n{\n constructor({ name, url, transition_data })\n {\n super(name);\n\n this.url = url;\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n this.current_opacity = 0;\n\n VCManager.register_view_controller(this);\n TransitionManager.add_transitions(transitions);\n }\n\n show()\n {\n WorkerToMain.push(`${this.name}_view.show`);\n }\n\n before_enter()\n {\n WorkerToMain.push(`${this.name}_view.before_enter`);\n }\n\n on_enter()\n {\n WorkerToMain.push(`${this.name}_view.on_enter`);\n }\n\n before_exit()\n {\n WorkerToMain.push(`${this.name}_view.before_exit`);\n }\n\n on_exit()\n {\n WorkerToMain.push(`${this.name}_view.on_exit`);\n }\n\n hide()\n {\n WorkerToMain.push(`${this.name}_view.hide`);\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_view.update`);\n }\n\n fixed_update()\n {\n // TODO: Evaluate if a fixed update is necessary on the main thread\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_enter_transition`, [global_view_data, transition_progress]);\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_exit_transition`, [global_view_data, transition_progress]);\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n WorkerToMain.push(`${this.name}_view.set_opacity`, [opacity]);\n }\n }\n}\n\nexport { ApplicationViewController };\n","class CameraManager\n{\n init()\n {\n this._current = undefined;\n // VR Spectator\n this._spectator = undefined;\n }\n\n set current(camera)\n {\n this._current = camera;\n }\n\n get current()\n {\n return this._current;\n }\n\n set spectator(camera)\n {\n this._spectator = camera;\n }\n\n get spectator()\n {\n return this._spectator;\n }\n}\n\nconst camera_manager = new CameraManager();\nexport { camera_manager as CameraManager };\n","import { CanvasTexture } from 'three';\nimport { Vector2 } from 'three';\nimport { UVMapping } from 'three';\nimport { ClampToEdgeWrapping } from 'three';\nimport { NearestFilter } from 'three';\n\nclass CanvasDrawer\n{\n constructor(uses_dynamic_font)\n {\n this.uses_dynamic_font = uses_dynamic_font;\n this.__textHeight = null;\n\n this.canvas = document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n }\n\n getFontHeight(fontStyle = 'Arial')\n {\n if (this.__textHeight == null || this.uses_dynamic_font)\n {\n const body = document.getElementsByTagName('body')[0];\n const dummy = document.createElement('div');\n const dummyText = document.createTextNode('MÉqgOLAKTAL');\n dummy.appendChild(dummyText);\n dummy.setAttribute('style', `font:${fontStyle};position:absolute;top:0;left:0`);\n body.appendChild(dummy);\n this.__textHeight = dummy.offsetHeight;\n body.removeChild(dummy);\n }\n return this.__textHeight;\n }\n\n get_text_size(text, font = '24px Arial')\n {\n const size = new Vector2();\n this.ctx.font = font;\n size.x = Math.ceil(this.ctx.measureText(text).width);\n size.y = Math.ceil(this.getFontHeight(font));\n return size;\n }\n\n draw_canvas(text, ctxOptions = {})\n {\n ctxOptions.font = ctxOptions.font || '24px Arial';\n ctxOptions.font_color = ctxOptions.font_color || '#000000';\n\n this.__draw(text, ctxOptions, this.canvas, this.ctx);\n return this.canvas;\n }\n\n draw_on_texture(text, ctxOptions)\n {\n const canvas = this.draw_canvas(text, ctxOptions);\n const canvas_texture = new CanvasTexture(canvas, UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n NearestFilter,\n NearestFilter);\n canvas_texture.generateMipMaps = false;\n canvas_texture.needsUpdate = true;\n\n return canvas_texture;\n }\n\n __draw(text, ctxOptions)\n {}\n\n roundRect(ctx, x, y, width, height, radius, fill, stroke)\n {\n if (typeof stroke === 'undefined')\n {\n stroke = true;\n }\n if (typeof radius === 'undefined')\n {\n radius = 5;\n }\n if (typeof radius === 'number')\n {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n else\n {\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (const side in defaultRadius)\n {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n if (fill)\n {\n ctx.fill();\n }\n if (stroke)\n {\n ctx.stroke();\n }\n }\n}\n\nexport { CanvasDrawer };\n","\nimport { CanvasDrawer } from './CanvasDrawer';\n\nimport { Vector2 } from 'three';\n\nclass SimpleTextDrawer extends CanvasDrawer\n{\n constructor()\n {\n super();\n this.text_margin = new Vector2(2, 0);\n }\n\n __draw(text, ctxOptions, canvas, ctx)\n {\n ctx.font = ctxOptions.font;\n\n const text_size = this.get_text_size(text, ctxOptions.font);\n // canvas.width = Math.ceilPowerOfTwo(text_size.x+this.text_margin.x*2);\n // canvas.height = Math.ceilPowerOfTwo(text_size.y+ this.text_margin.y*2);\n canvas.width = Math.ceil(text_size.x + this.text_margin.x * 2);\n canvas.height = Math.ceil(text_size.y + this.text_margin.y * 2);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // turn this on for debugging\n ctx.globalAlpha = 0.0;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalAlpha = 1;\n\n ctx.globalAlpha = 1;\n\n ctx.font = ctxOptions.font;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.textBaseline = 'middle';\n\n ctx.textAlign = ctxOptions.textAlign || 'center';\n if (ctx.textAlign === 'center')\n {\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n }\n else\n {\n ctx.fillText(text, 0, canvas.height / 2);\n }\n }\n}\n\nexport { SimpleTextDrawer };\n","class Capabilities\n{\n init()\n {\n this.max_anisotropy = 0;\n this.vertex_texture_sampler_available = false;\n this.fp_textures_available = false;\n }\n}\n\nconst capabilities = new Capabilities();\nexport { capabilities as Capabilities };\n","\nimport { Object3D } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { AlwaysDepth } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Vector3 } from 'three';\nimport { Line } from 'three';\n\nclass AxisHelper extends Object3D\n{\n constructor(scale = 1.0)\n {\n super();\n\n const blue_points = [];\n blue_points.push(new Vector3(0, 0, 0));\n blue_points.push(new Vector3(0, 0, 1000));\n\n const blue_axis_mat = new LineBasicMaterial({ color: 0x4444ff, depthFunc: AlwaysDepth });\n const blue_axis_geo = new BufferGeometry().setFromPoints(blue_points);\n const blue_axis_line = new Line(blue_axis_geo, blue_axis_mat);\n blue_axis_line.renderOrder = 50000;\n\n const green_points = [];\n green_points.push(new Vector3(0, 0, 0));\n green_points.push(new Vector3(0, 1000, 0));\n\n const green_axis_mat = new LineBasicMaterial({ color: 0x44ff44, depthFunc: AlwaysDepth });\n const green_axis_geo = new BufferGeometry().setFromPoints(green_points);\n const green_axis_line = new Line(green_axis_geo, green_axis_mat);\n green_axis_line.renderOrder = 50000;\n\n const red_points = [];\n red_points.push(new Vector3(0, 0, 0));\n red_points.push(new Vector3(1000, 0, 0));\n\n const red_axis_mat = new LineBasicMaterial({ color: 0xff4444, depthFunc: AlwaysDepth });\n const red_axis_geo = new BufferGeometry().setFromPoints(red_points);\n const red_axis_line = new Line(red_axis_geo, red_axis_mat);\n red_axis_line.renderOrder = 50000;\n\n this.renderOrder = 100000;\n\n this.add(blue_axis_line);\n this.add(green_axis_line);\n this.add(red_axis_line);\n\n this.scale.set(scale, scale, scale);\n }\n\n update()\n {\n }\n\n dispose()\n {\n }\n}\n\nexport { AxisHelper };\n","import { Scene } from 'three';\n\nclass SceneManager\n{\n init()\n {\n this._current = new Scene();\n this._current.name = 'default_scene';\n }\n\n add_scene(name)\n {\n\n }\n\n get current()\n {\n return this._current;\n }\n\n set current(scene)\n {\n this._current = scene;\n }\n\n dispose()\n {\n this.current.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.dispose();\n child.material.dispose();\n }\n });\n\n while (this.current.children.length > 0)\n {\n this.current.remove(this.current.children[0]);\n }\n }\n}\n\nconst scene_manager = new SceneManager();\nexport { scene_manager as SceneManager };\n","\nimport { Vector3, Mesh } from 'three';\nimport { BoxGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Cube extends Mesh\n{\n constructor(size, segments, color)\n {\n size = size || new Vector3(1, 1, 1);\n segments = segments || new Vector3(1, 1, 1);\n color = color || 0xff0000;\n const geometry = new BoxGeometry(size.x, size.y, size.z, segments.x, segments.y, segments.z);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Cube };\n","import { Mesh } from 'three';\nimport { SphereBufferGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Sphere extends Mesh\n{\n constructor(radius, color)\n {\n color = color || '#FF0000';\n radius = radius || 1;\n const geometry = new SphereBufferGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Sphere };\n","import { CylinderBufferGeometry } from 'three';\nimport { ConeBufferGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { Vector3, Mesh } from 'three';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nclass Arrow extends Mesh\n{\n constructor(color, length, dir)\n {\n color = color || '#FF0000';\n length = length || 1;\n\n const cone_height = 0.4;\n const cylinder_height = length - cone_height;\n const cylinder_geo = new CylinderBufferGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeBufferGeometry(0.1, cone_height, 32);\n cone_geometry.translate(0, cylinder_height + cone_height / 2, 0);\n\n const buffer_geometry = BufferGeometryUtils.mergeBufferGeometries([cylinder_geo, cone_geometry]);\n buffer_geometry.rotateX(3.14 / 2);\n\n const material = new MeshBasicMaterial({ color: color });\n super(buffer_geometry, material);\n\n if (dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n }\n\n this._dir = dir;\n }\n\n set dir(dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n this._dir = dir;\n }\n\n get dir()\n {\n return this._dir;\n }\n\n set length(value)\n {\n this.scale.z = value;\n }\n\n get length()\n {\n return this.scale.z;\n }\n}\n\nexport { Arrow };\n","import { Vector2 } from 'three';\n\nclass OScreen\n{\n init()\n {\n this.width = 1;\n this.height = 1;\n\n this.position = new Vector2();\n\n this.render_width = 1;\n this.render_height = 1;\n this.width_height = new Vector2(this.width, this.height);\n\n this.dpr = 1;\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n }\n\n update_position(x, y)\n {\n this.position.set(x, y);\n }\n\n update()\n {\n this.size_changed = false;\n }\n\n update_size(width, height)\n {\n this.width = width;\n this.height = height;\n\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n\n this.width_height.x = width;\n this.width_height.y = height;\n\n this.render_width = width * this.dpr;\n this.render_height = height * this.dpr;\n\n this.size_changed = true;\n }\n\n apply_pixel_density_v2(vector2)\n {\n vector2.multiplyScalar(1 / this.dpr);\n\n return vector2;\n }\n\n apply_pixel_density(value)\n {\n return value * (1 / this.dpr);\n }\n\n get_pixel_size()\n {\n return this.pixel_size;\n }\n\n get aspect_ratio()\n {\n return this.width / this.height;\n }\n\n get portrait()\n {\n return this.width < this.height;\n }\n}\n\nconst oscreen = new OScreen();\nexport { oscreen as OScreen };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\nimport { Vector2 } from 'three';\nclass ScreenSpaceTextureMaterial extends BaseShaderMaterial\n{\n constructor(x, y, w, h)\n {\n const vert = `\n uniform vec2 _ScreenSpacePosition;\n uniform vec2 _ScreenSize;\n uniform vec2 _TextureSize;\n varying vec2 vUv;\n void main()\n {\n vec2 pos = uv * vec2(_TextureSize.x / _ScreenSize.x, _TextureSize.y / _ScreenSize.y);\n pos += vec2(_ScreenSpacePosition.x / _ScreenSize.x, _ScreenSpacePosition.y / _ScreenSize.y);\n\n pos.x = pos.x * 2.0 - 1.0;\n pos.y = pos.y * 2.0 - 1.0;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n vUv = uv;\n }\n `;\n const frag = `\n uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n `;\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSpacePosition: { value: new Vector2() },\n _ScreenSize: { value: new Vector2() },\n _TextureSize: { value: new Vector2() }\n });\n }\n\n set_position(x, y)\n {\n this.uniforms._ScreenSpacePosition.value.set(x, y);\n }\n\n set_texture(tex, w, h)\n {\n this.uniforms._MainTex.value = tex;\n this.uniforms._TextureSize.value.set(tex.image.width, tex.image.height);\n\n if (w !== undefined)\n {\n this.uniforms._TextureSize.value.x = w;\n }\n if (h !== undefined)\n {\n this.uniforms._TextureSize.value.y = h;\n }\n }\n\n set_screen_size(w, h)\n {\n this.uniforms._ScreenSize.value.set(w, h);\n }\n}\n\nexport { ScreenSpaceTextureMaterial };\n","import { Color } from 'three';\nimport { PerspectiveCamera as TPerspectiveCamera } from 'three';\n\nclass PerspectiveCamera extends TPerspectiveCamera\n{\n constructor(fov, aspect, near, far)\n {\n super(fov, aspect, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { PerspectiveCamera };\n","import { AxisHelper } from './components/AxisHelper';\n\nimport { SceneManager } from './SceneManager';\nimport { Cube } from './primitives/Cube';\nimport { Sphere } from './primitives/Sphere';\nimport { Arrow } from './primitives/Arrow';\nimport { OScreen } from './OScreen';\nimport { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';\nimport { PerspectiveCamera } from './PerspectiveCamera';\n\nimport { Vector3 } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Line } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Vector4 } from 'three';\nimport { Mesh } from 'three';\nimport { Box3 } from 'three';\nimport { Box3Helper } from 'three';\nimport { Scene } from 'three';\nimport { CatmullRomCurve3 } from 'three';\nimport { SphereGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nimport basic_color_vert from './shaders/basic_color/basic_color.vert';\nimport basic_color_frag from './shaders/basic_color/basic_color.frag';\nimport { CameraManager } from './CameraManager';\n\nclass Debug\n{\n init()\n {\n this.Vector3_one = new Vector3(1, 1, 1);\n this.Vector3_zero = new Vector3(0, 0, 0);\n this.canvas_renderer = undefined;\n\n this.display_texture_meshes = [];\n\n this.ctx = undefined;\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);\n this.camera.clear_alpha = 0;\n }\n\n draw_arrow(origin, dir, color = 0xff0000)\n {\n const arrow = new Arrow(color, dir.length(), dir.clone().normalize());\n arrow.position.copy(origin);\n this.scene.add(arrow);\n return arrow;\n }\n\n draw_axis()\n {\n const axis = new AxisHelper();\n this.scene.add(axis);\n return axis;\n }\n\n set_debug_RT(RT)\n {\n this.rt_debug = RT;\n }\n\n draw_rectangle(position_2d, width, height, color)\n {\n width = width || 100;\n height = height || 100;\n this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.fillRect(position_2d.x - width / 2,\n (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);\n }\n\n clear()\n {\n if (this.ctx)\n {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n }\n }\n\n draw_line_2D(from, to, color)\n {\n this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.beginPath();\n this.ctx.moveTo(from.x, from.y);\n this.ctx.lineTo(to.x, to.y);\n this.ctx.closePath();\n this.ctx.stroke();\n }\n\n draw_line(points, color = 0xff0000)\n {\n const material = new LineBasicMaterial({\n color: color\n });\n\n const geometry = new BufferGeometry().setFromPoints(points);\n\n const line = new Line(geometry, material);\n line.frustumCulled = false;\n this.scene.add(line);\n return line;\n }\n\n draw_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const cube = new Cube(new Vector3(size, size, size), undefined, color);\n cube.position.copy(pos);\n this.scene.add(cube);\n return cube;\n }\n\n draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)\n {\n const size = from.distanceTo(to);\n const cube = new Cube(new Vector3(depth, height, size), undefined, color);\n\n const center = to.clone().sub(from).multiplyScalar(0.5);\n const forward_dir = center.clone().normalize();\n center.add(from);\n\n cube.position.copy(center);\n\n // let up = new Vector3(0, 1, 0);\n // let forward = forward_dir.clone();\n // let right = forward.clone().cross(up);\n\n // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));\n cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);\n\n this.scene.add(cube);\n return cube;\n }\n\n draw_plane(width, height, color)\n {\n const geometry = new PlaneGeometry(width, height);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(0, 1, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true,\n depthWrite: false\n });\n\n const plane = new Mesh(geometry, material);\n plane.renderOrder = -10000;\n this.scene.add(plane);\n return plane;\n }\n\n draw_empty_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n\n const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));\n const helper = new Box3Helper(box, color);\n helper.position.copy(pos || new Vector3());\n return helper;\n }\n\n draw_sphere(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const sphere = new Sphere(size, color);\n sphere.position.copy(pos);\n this.scene.add(sphere);\n return sphere;\n }\n\n draw_point_array(input_points, open = false, color = 0xff0000)\n {\n const catmull = new CatmullRomCurve3(input_points, open);\n catmull.updateArcLengths();\n const points = catmull.getSpacedPoints(200);\n const line_helper = this.draw_line(points, 0x00ff00);\n // line_helper.position.y = 1.5;\n return line_helper;\n }\n\n draw_sphere_helper(sphere, color)\n {\n color = color || 0xff0000;\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new MeshBasicMaterial({ color: color });\n const sphere_mesh = new Mesh(geometry, material);\n sphere_mesh.position.copy(sphere.center);\n SceneManager.current.add(sphere_mesh);\n return sphere_mesh;\n }\n\n draw_math_sphere(sphere)\n {\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(1, 0, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true\n });\n // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );\n const sphere1 = new Mesh(geometry, material);\n sphere1.position.copy(sphere.center);\n SceneManager.current.add(sphere1);\n }\n\n draw_bounding_box(bb)\n {\n const helper = new Box3Helper(bb, 0xffff00);\n SceneManager.current.add(helper);\n }\n\n draw_curve(curve, options)\n {\n const offset = new Vector3(0, 0, 0);\n if (options)\n {\n offset.y = options.offset || 0;\n }\n\n for (let i = 0; i < curve.length - 1; i++)\n {\n this.draw_line(curve[i].clone().add(offset), curve[i + 1].clone().add(offset));\n }\n }\n\n draw_texture(tex, w, h)\n {\n const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());\n this.display_texture_meshes.push(mesh);\n this.scene.add(mesh);\n\n mesh.material.set_texture(tex, w, h);\n return mesh;\n }\n\n render(graphics)\n {\n for (let i = 0; i < this.display_texture_meshes.length; i++)\n {\n this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);\n }\n if (this.scene.children.length > 0)\n {\n graphics.render(this.scene, CameraManager.current);\n }\n }\n}\n\nconst debug = new Debug();\nexport { debug as Debug };\n","class EventManager\n{\n init()\n {\n this.queue = {};\n\n this.zoom_changed_evt = 'zoom_changed';\n this.store_clickd_evt = 'store_clicked';\n this.point_selected_evt = 'point_selected';\n this.config_changed = 'config_changed';\n\n this.path_substep_completed = 'path_substep_completed';\n this.path_completed = 'path_completed';\n this.go_to_store_requested_evt = 'go_to_store_requested';\n\n this.resource_loaded_evt = 'resource_loaded';\n this.service_clicked_evt = 'service_clicked';\n this.unit_pos_updated_evt = 'unit_position_updated';\n\n this.floor_changed_evt = 'floor_changed';\n\n this.on_enter_floor_navigation = 'on_enter_floor_navigation';\n this.on_exit_floor_navigation = 'on_exit_floor_navigation';\n\n this.on_enter_floor_selection = 'on_enter_floor_selection';\n this.on_exit_floor_selection = 'on_exit_floor_selection';\n\n this.on_enter_outside_navigation = 'on_enter_outside_navigation';\n this.on_exit_outside_navigation = 'on_exit_outside_navigation';\n\n this.step_selected_evt = 'step_selected';\n }\n\n fire(event, payload)\n {\n const queue = this.queue[event];\n\n if (queue === undefined)\n {\n return;\n }\n let i = queue.length;\n while (i--)\n {\n queue[i](payload);\n }\n }\n\n on(event, callback)\n {\n if (typeof this.queue[event] === 'undefined')\n {\n this.queue[event] = [];\n }\n\n this.queue[event].push(callback);\n }\n\n fire_zoom_changed(zoom)\n {\n this.fire(this.zoom_changed_evt, zoom);\n }\n\n fire_store_selected(store_id)\n {\n this.fire(this.store_clickd_evt, store_id);\n }\n\n fire_point_selected(hit_data)\n {\n this.fire(this.point_selected_evt, hit_data);\n }\n\n fire_config_changed()\n {\n this.fire(this.config_changed);\n }\n\n fire_path_substep_completed(step_number)\n {\n this.fire(this.path_substep_completed, step_number);\n }\n\n fire_path_completed()\n {\n this.fire(this.path_completed);\n }\n\n fire_step_selected(step_index)\n {\n this.fire(this.step_selected_evt, step_index);\n }\n\n fire_go_to_store_requested(store_id)\n {\n this.fire(this.go_to_store_requested_evt, store_id);\n }\n\n fire_resource_loaded(resource)\n {\n this.fire(this.resource_loaded_evt, resource);\n }\n\n fire_service_clicked(service)\n {\n this.fire(this.service_clicked_evt, service);\n }\n\n fire_unit_position_updated(unit_data)\n {\n this.fire(this.unit_pos_updated_evt, unit_data);\n }\n\n fire_floor_switched(floor_id)\n {\n this.fire(this.floor_changed_evt, floor_id);\n }\n\n fire_on_enter_floor_navigation(state)\n {\n this.fire(this.on_enter_floor_navigation, state);\n }\n\n fire_on_exit_floor_navigation(state)\n {\n this.fire(this.on_exit_floor_navigation, state);\n }\n\n fire_on_enter_floor_selection(state)\n {\n this.fire(this.on_enter_floor_selection, state);\n }\n\n fire_on_exit_floor_selection(state)\n {\n this.fire(this.on_exit_floor_selection, state);\n }\n\n fire_on_enter_outside_navigation(state)\n {\n this.fire(this.on_enter_outside_navigation, state);\n }\n\n fire_on_exit_outside_navigation(state)\n {\n this.fire(this.on_exit_outside_navigation, state);\n }\n}\n\nconst event_manager = new EventManager();\nexport { event_manager as EventManager };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport { Scene } from 'three';\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass Blitter\n{\n constructor(renderer)\n {\n this.renderer = renderer;\n this._blit_scene = new Scene();\n this._blit_material = new BlitMaterial();\n this._blit_quad = new Mesh(\n new PlaneGeometry(1, 1), this._blit_material);\n this._blit_scene.add(this._blit_quad);\n this._blit_camera = new OrthographicCamera(-1, 1, 1, -1, -10000, 10000);\n }\n\n blit(src, dst)\n {\n this._blit_quad.material = this._blit_material;\n\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n material_pass(mat, dst)\n {\n this._blit_quad.material = mat;\n // this._blit_quad.material.uniforms._MainTex.value = undefined;\n // this._blit_quad.material.uniforms._Resolution.value.set(1, 1);\n\n this.__render(dst);\n }\n\n blit_with_material(src, dst, mat)\n {\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material = mat;\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this._blit_quad.material = mat;\n\n this.__render(dst_RT);\n }\n\n dispose()\n {\n this._blit_quad.geometry.dispose();\n this._blit_quad.material.dispose();\n }\n\n __render(RT)\n {\n RT = RT === undefined ? null : RT;\n\n const current_rt = this.renderer.getRenderTarget();\n\n this.renderer.setRenderTarget(RT === undefined ? null : RT);\n this.renderer.render(this._blit_scene, this._blit_camera);\n\n this.renderer.setRenderTarget(current_rt);\n }\n}\n\nexport { Blitter };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/clear/clear_depth_normal.frag';\n\nimport { Vector4 } from 'three';\n\nclass ClearDepthNormalMaterial extends BlitMaterial\n{\n constructor(clear_depth, clear_normal)\n {\n super(frag);\n this.uniforms._DepthNormal = { value: new Vector4(clear_depth, clear_normal.x, clear_normal.y, clear_normal.z) };\n }\n}\n\nexport { ClearDepthNormalMaterial };\n","import vert from '../shaders/depth_normals/depth_normals.vert';\nimport frag from '../shaders/depth_normals/depth_normals.frag';\n\nimport { ShaderMaterial } from 'three';\n\nclass DepthNormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n _FarPlane: { value: 1 }\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n\n set far_plane(value)\n {\n this.uniforms._FarPlane.value = value;\n }\n\n get far_plane()\n {\n return this.uniforms._FarPlane.value;\n }\n}\n\nexport { DepthNormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { OScreen } from '../OScreen';\n\nimport { ClearDepthNormalMaterial } from '../materials/ClearDepthNormalMaterial';\nimport { DepthNormalMaterial } from '../materials/DepthNormalMaterial';\n\nimport { WebGLRenderTarget } from 'three';\nimport { Vector3 } from 'three';\n\nclass DepthAndNormalsRenderer\n{\n constructor()\n {\n this.RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.clear_depth_normal_mat = new ClearDepthNormalMaterial(1, new Vector3(0, 0, 1));\n this.depth_normal_material = new DepthNormalMaterial();\n }\n\n render(graphics)\n {\n this.__resize_RT_if_necessary();\n\n graphics.clear(this.RT, undefined, true, true);\n\n graphics.blit_clear_with_material(this.RT, this.clear_depth_normal_mat);\n\n this.depth_normal_material.far_plane = CameraManager.current.far;\n\n graphics.render(undefined, undefined, this.RT, this.depth_normal_material);\n }\n\n __resize_RT_if_necessary()\n {\n if (this.RT.width !== OScreen.width || this.RT.height !== OScreen.height)\n {\n this.RT.setSize(OScreen.width, OScreen.height);\n }\n }\n\n get render_target()\n {\n return this.RT;\n }\n}\n\nexport { DepthAndNormalsRenderer };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { OScreen } from './OScreen';\nimport { SceneManager } from './SceneManager';\nimport { BaseRender } from './render_mode/BaseRender';\nimport { Blitter } from './render_utilities/Blitter';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\n\nimport {\n AlwaysDepth,\n FloatType,\n LinearSRGBColorSpace,\n NearestFilter,\n NoBlending,\n RGBAFormat,\n ShaderMaterial,\n WebGLRenderTarget\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n init({ canvas, core_attributes, context_attributes, threejs_attributes, dpr })\n {\n this._renderer = undefined;\n this.blitter = undefined;\n this.canvas = undefined;\n this.no_render = undefined;\n this.current_render_mode = undefined;\n this.generateDepthNormalTexture = false;\n this.depth_and_normals_renderer = undefined;\n\n this.is_webgl2 = false;\n this.canvas_context = undefined;\n this.context_attributes = undefined;\n\n this.core_attributes = {\n force_webgl2: true,\n xr_enabled: false\n };\n\n this.context_attributes = {\n alpha: true,\n antialias: false,\n depth: true,\n desynchronized: false,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'high-performance',\n premultipliedAlpha: true,\n preserveDrawingBuffer: true,\n stencil: false\n };\n\n this.threejs_attributes = {\n logarithmicDepthBuffer: false\n };\n\n Object.assign(this.core_attributes, core_attributes);\n Object.assign(this.context_attributes, context_attributes);\n\n Object.assign(this.threejs_attributes, this.context_attributes);\n Object.assign(this.threejs_attributes, threejs_attributes);\n\n if (this.core_attributes.force_webgl2)\n {\n this.canvas_context = canvas.getContext('webgl2', this.context_attributes) ||\n canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n else\n {\n this.canvas_context = canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n\n this.is_webgl2 = this.canvas_context.constructor.name === 'WebGL2RenderingContext';\n\n // console.log(`Using WebGL ${this.is_webgl2 ? 2 : 1}`);\n\n this.threejs_attributes.canvas = canvas;\n this.threejs_attributes.context = this.canvas_context;\n\n this._renderer = new WebGLRenderer(this.threejs_attributes);\n\n if (this.core_attributes.xr_enabled)\n {\n this._renderer.xr.enabled = true;\n }\n else\n {\n this._renderer.autoClear = false;\n }\n\n OScreen.dpr = dpr;\n this._renderer.setPixelRatio(1);\n\n if (!this.is_webgl2)\n {\n this._renderer.extensions.get('ANGLE_instanced_arrays');\n }\n\n this.blitter = new Blitter(this._renderer);\n\n this.canvas = this._renderer.domElement;\n\n this.no_render = new BaseRender();\n\n this.current_render_mode = this.no_render;\n\n Capabilities.max_anisotropy = this._renderer.capabilities.getMaxAnisotropy();\n Capabilities.vertex_texture_sampler_available = this._renderer.capabilities.maxVertexTextures > 0;\n Capabilities.fp_textures_available = this.is_floating_point_texture_available();\n\n this.generateDepthNormalTexture = false;\n\n this.depth_and_normals_renderer = new DepthAndNormalsRenderer();\n }\n\n get dom_element()\n {\n return this._renderer.domElement;\n }\n\n get depth_normals_RT()\n {\n return this.depth_and_normals_renderer.render_target;\n }\n\n set_state(new_state)\n {\n // console.log('VIEWAPI - map render mode switch to: ' + new_state.constructor.name);\n\n this.current_render_mode.on_exit(this, this._renderer);\n this.current_render_mode = new_state;\n this.current_render_mode.on_enter(this, this._renderer);\n }\n\n update()\n {\n if (this.generateDepthNormalTexture)\n {\n this.depth_and_normals_renderer.render(this);\n }\n\n this.__update_current_camera();\n\n if (CameraManager.current)\n {\n this.current_render_mode.render();\n }\n\n OScreen.update();\n }\n\n __update_current_camera()\n {\n if (CameraManager.current)\n {\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateProjectionMatrix();\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n }\n\n render(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.render(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n render_scene(scene)\n {\n if (scene.on_pre_render)\n {\n scene.on_pre_render();\n }\n\n if (scene.render)\n {\n scene.render();\n }\n else\n {\n this.render(scene, undefined);\n }\n\n if (scene.on_post_render)\n {\n scene.on_post_render();\n }\n }\n\n __apply_override_material(scene, mat)\n {\n mat = mat === undefined ? null : mat;\n if (scene)\n {\n scene.overrideMaterial = mat;\n }\n else\n {\n SceneManager.current.overrideMaterial = mat;\n }\n }\n\n readback_RT(RT, buffer)\n {\n this._renderer.readRenderTargetPixels(RT, 0, 0, RT.width, RT.height, buffer);\n }\n\n clear(RT, camera, clear_depth, clear_stencil)\n {\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n\n if (camera)\n {\n this._renderer.setClearColor(camera.clear_color, camera.clear_alpha);\n }\n\n this._renderer.clear(!!camera, // clear color\n !!clear_depth,\n !!clear_stencil);\n }\n\n on_resize(entries, dpr)\n {\n for (const entry of entries)\n {\n OScreen.dpr = dpr;\n // this._renderer.setPixelRatio(dpr);\n\n OScreen.update_position(entry.contentRect.x, entry.contentRect.y);\n OScreen.update_size(entry.contentRect.width, entry.contentRect.height);\n\n this.canvas.width = OScreen.render_width;\n this.canvas.height = OScreen.render_height;\n\n this._renderer.setViewport(0, 0, OScreen.render_width, OScreen.render_height);\n\n this.__update_current_camera();\n }\n }\n\n material_pass(mat, dst)\n {\n this.blitter.material_pass(mat, dst);\n }\n\n blit(src_RT, dst_RT, mat)\n {\n if (mat)\n {\n this.blitter.blit_with_material(src_RT, dst_RT, mat);\n }\n else\n {\n this.blitter.blit(src_RT, dst_RT);\n }\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this.blitter.blit_clear_with_material(dst_RT, mat);\n }\n\n take_screenshot(blob_callback, width = OScreen.width, height = OScreen.height)\n {\n // const ctx = this;\n\n const old_width = OScreen.width;\n const old_height = OScreen.height;\n\n const new_width = width;\n const new_height = height;\n\n const tile_width = 1024;\n const tile_height = 1024;\n\n const divisions_x = parseInt(Math.ceil(new_width / tile_width));\n const divisions_y = parseInt(Math.ceil(new_height / tile_height));\n\n OScreen.update_size(tile_width, tile_height);\n const old_dpr = this._renderer.getPixelRatio();\n this._renderer.setPixelRatio(1);\n\n this._renderer.setSize(tile_width, tile_height, false);\n\n const canvas_2d = document.createElement('canvas');\n const ctx_2D = canvas_2d.getContext('2d');\n\n ctx_2D.canvas.width = new_width;\n ctx_2D.canvas.height = new_height;\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n\n for (let x = 0; x < divisions_x; x++)\n {\n for (let y = 0; y < divisions_y; y++)\n {\n CameraManager.current.setViewOffset(new_width, new_height,\n OScreen.width * x, OScreen.height * y,\n OScreen.width, OScreen.height);\n this.current_render_mode.render();\n\n ctx_2D.drawImage(this._renderer.domElement, OScreen.width * x, OScreen.height * y);\n }\n }\n\n // transform the result canvas into a blob\n // } from them the callback turns into a ULR and download it\n ctx_2D.canvas.toBlob(blob_callback, 'image/png;base64;');\n\n CameraManager.current.clearViewOffset();\n\n OScreen.update_size(old_width, old_height);\n this._renderer.setPixelRatio(old_dpr);\n this._renderer.setSize(old_width, old_height, false);\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n\n download_screenshot(blob)\n {\n const link = document.createElement('a');\n link.download = 'Snapshot.png';\n\n link.href = URL.createObjectURL(blob);\n link.click();\n\n link.onclick = function()\n {\n requestAnimationFrame(function()\n {\n URL.revokeObjectURL(link.href);\n });\n link.removeAttribute('href');\n };\n }\n\n dispose()\n {\n this._renderer.dispose();\n this.current_render_mode.dispose();\n this.blitter.dispose();\n }\n\n is_floating_point_texture_available()\n {\n const RT = new WebGLRenderTarget(1, 1, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","class Idle\n{\n constructor()\n {\n }\n\n get is_animating()\n {\n return false;\n }\n\n on_enter(view)\n {\n\n }\n\n update(view)\n {\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Idle };\n","import { Time } from '../../Time';\nimport { Idle } from './Idle';\n\nimport { OMath } from '../../utilities/OMath';\nclass Animating\n{\n constructor()\n {\n this.t = 0;\n this.easing_function_t = 0;\n }\n\n get is_animating()\n {\n return true;\n }\n\n on_enter(animator)\n {\n }\n\n update(animator)\n {\n this.t += Time.delta_time / animator.duration;\n\n this.easing_function_t = animator.easing_function(this.t);\n this.easing_function_t = OMath.clamp(this.easing_function_t, 0, 1);\n\n animator.set_property_value(OMath.lerp(animator.from, animator.to, this.easing_function_t));\n\n if (this.easing_function_t >= 0.9999)\n {\n animator.set_property_value(animator.to);\n\n animator.set_current_state(new Idle());\n animator.finished_callback(animator);\n }\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Animating };\n","import { Animating } from './css_animator_states/Animating';\nimport { Idle } from './css_animator_states/Idle';\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass CSSAnimator\n{\n constructor({\n element,\n css_property,\n from = 0,\n to = 1,\n duration = 1,\n value_prefix = '',\n value_suffix = '',\n easing_function = EasingFunctions.ease_in_out_cubic,\n finished_callback = () =>\n {}\n })\n {\n this.element = element;\n this.css_property = css_property;\n this.from = from;\n this.to = to;\n this.value_prefix = value_prefix;\n this.value_suffix = value_suffix;\n this.duration = duration;\n this.easing_function = easing_function;\n this.finished_callback = finished_callback;\n\n this.current_state = new Idle();\n }\n\n animate()\n {\n this.set_current_state(new Animating());\n }\n\n stop()\n {\n this.set_current_state(new Idle());\n }\n\n set_property_value(value)\n {\n this.element.style[this.css_property] = `${this.value_prefix}${value}${this.value_suffix}`;\n }\n\n update()\n {\n this.current_state.update(this);\n }\n\n get is_animating()\n {\n return this.current_state.is_animating;\n }\n\n set_current_state(state)\n {\n this.current_state.on_exit(this);\n this.current_state = state;\n this.current_state.on_enter(this);\n }\n}\n\nexport { CSSAnimator };\n","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = navigator.userAgent;\n const platform = navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { EventManager } from './EventManager';\n\nclass ResourceContainer\n{\n init()\n {\n this.resources = {};\n this.resources_by_url = {};\n }\n\n set_resource(name, url, resource)\n {\n const urls = Object.keys(this.resources_by_url);\n\n if (urls.includes(url))\n {\n this.resources[name] = this.resources_by_url[url];\n }\n else\n {\n this.resources[name] = resource;\n this.resources_by_url[url] = resource;\n }\n\n EventManager.fire_resource_loaded({ name: name, value: resource });\n }\n\n get_resource(name)\n {\n return this.resources[name];\n }\n\n get(name)\n {\n return this.resources[name];\n }\n}\n\nconst resource_container = new ResourceContainer();\nexport { resource_container as ResourceContainer };\n","import { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Mesh } from 'three';\nimport { DataTexture } from 'three';\nimport { RGBAFormat } from 'three';\nimport { RGBFormat } from 'three';\nimport { FloatType } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeBufferGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Debug } from './Debug';\nimport { EventManager } from './EventManager';\nimport { Graphics } from './Graphics';\nimport { OS } from './OS';\nimport { OScreen } from './OScreen';\nimport { ReflectionPlaneContext } from './ReflectionPlaneContext';\nimport { ResourceContainer } from './ResourceContainer';\nimport { SceneManager } from './SceneManager';\nimport { GeometryBatcher } from './static_batcher/GeometryBatcher';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { CameraUtilities } from './utilities/CameraUtilities';\n\nclass Initializer\n{\n constructor()\n {\n }\n\n init(input)\n {\n CameraManager.init();\n CameraUtilities.init(input);\n Capabilities.init();\n EventManager.init();\n GeometryBatcher.init();\n\n OS.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose()\n {\n Graphics.dispose();\n SceneManager.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","class KeyboardInput\n{\n init(container)\n {\n this.ctrlz_pressed = false;\n this.ctrlz_fired = false;\n\n this.keys = {};\n this.keys_keys = [];\n this.container = container;\n\n this.container.addEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.addEventListener('keyup', this.on_key_up.bind(this), false);\n }\n\n on_key_down(e)\n {\n if (e.keyCode === 90 && e.ctrlKey && !this.ctrlz_fired)\n {\n this.ctrlz_pressed = true;\n this.ctrlz_fired = true;\n }\n\n if (e.code)\n {\n this.press_key(e.code);\n }\n }\n\n on_key_up(e)\n {\n this.release_key(e.code);\n }\n\n clear()\n {\n this.ctrlz_pressed = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].pressed = false;\n this.keys[this.keys_keys[i]].released = false;\n }\n }\n\n release_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n key.fired = false;\n key.down = false;\n key.released = true;\n }\n }\n\n release_keys()\n {\n this.ctrlz_fired = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].fired = false;\n this.keys[this.keys_keys[i]].down = false;\n }\n }\n\n press_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n if (key.down === false)\n {\n key.pressed = true;\n }\n key.down = true;\n key.fired = true;\n }\n }\n\n is_key_pressed(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.pressed;\n }\n return false;\n }\n\n is_key_down(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.down;\n }\n return false;\n }\n\n is_key_released(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.released;\n }\n\n return false;\n }\n\n register_key(key)\n {\n this.keys[key] =\n {\n key_name: key,\n pressed: false,\n down: false,\n fired: false\n };\n\n this.keys_keys = Object.keys(this.keys);\n }\n\n unregister_key(key_name)\n {\n delete this.keys[key_name];\n }\n\n dispose()\n {\n this.container.removeEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.removeEventListener('keyup', this.on_key_up.bind(this), false);\n }\n}\n\nexport { KeyboardInput };\n","import { Color } from 'three';\nimport { OrthographicCamera as TOrthographicCamera } from 'three';\n\nclass OrthographicCamera extends TOrthographicCamera\n{\n constructor(left, right, top, bottom, near, far)\n {\n super(left, right, top, bottom, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { OrthographicCamera };\n","import frag from '../shaders/normal/normal.frag';\nimport vert from '../shaders/normal/normal.vert';\n\nimport { ShaderMaterial } from 'three';\n\nclass NormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n}\n\nexport { NormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\nimport { NormalMaterial } from '../materials/NormalMaterial';\n\nclass DebugNormalsRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n Graphics.render(SceneManager.current, CameraManager.current, undefined, new NormalMaterial());\n }\n}\n\nexport { DebugNormalsRender };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/depth_normals/debug_normals.frag';\nimport depth_normals_vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\n\nclass DisplayNormalTextureMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, depth_normals_vert);\n this.uniforms._FarPlane = { value: 1 };\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n }\n}\n\nexport { DisplayNormalTextureMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao_compose.frag';\n\nclass SSAOComposeMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._AO = { value: undefined };\n }\n}\n\nexport { SSAOComposeMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\nimport { Vector3 } from 'three';\nimport { DataTexture } from 'three';\nimport { RGBFormat } from 'three';\nimport { RepeatWrapping } from 'three';\n\nimport { OMath } from '../utilities/OMath';\nclass SSAOMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, vert);\n\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n this.uniforms._ProjectionMatrix = { value: new Matrix4() };\n\n this.uniforms._Bias = { value: 0.0125 };\n this.uniforms._Radius = { value: 0.3 };\n this.uniforms._FarPlane = { value: 100 };\n\n this.uniforms._SampleKernel = { value: this.__get_sample_kernel() };\n this.uniforms._RandomRotation = { value: this.__get_rotation_kernel() };\n }\n\n __get_sample_kernel()\n {\n const sample_kernel = [];\n const kernel_size = 64;\n\n for (let i = 0; i < kernel_size; i++)\n {\n const dir = new Vector3(Math.random() * 2 - 1,\n Math.random() * 2 - 1,\n Math.random());\n dir.normalize();\n let scale = i / kernel_size;\n scale = OMath.lerp(0.1, 1.0, scale * scale);\n dir.multiplyScalar(scale);\n\n sample_kernel.push(dir);\n }\n return sample_kernel;\n }\n\n __get_rotation_kernel()\n {\n const rotation_kernel = new Uint8Array(3 * 16);\n for (let i = 0; i < 16; i++)\n {\n rotation_kernel[i * 3 + 1] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 2] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 3] = 0;\n }\n\n const rotation_texture = new DataTexture(rotation_kernel, 4, 4, RGBFormat);\n rotation_texture.wrapS = RepeatWrapping;\n rotation_texture.wrapT = RepeatWrapping;\n\n rotation_texture.needsUpdate = true;\n return rotation_texture;\n }\n}\n\nexport { SSAOMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/box_blur/box_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass BoxBlurMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._SampleDir = { value: new Vector2() };\n }\n}\n\nexport { BoxBlurMaterial };\n","import { BoxBlurMaterial } from '../materials/BoxBlurMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass Blurrer\n{\n constructor(renderer)\n {\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.box_blur_mat = new BoxBlurMaterial();\n }\n\n blur(RT)\n {\n if (RT.width !== this.RT1.width || RT.height !== this.RT1.height)\n {\n this.RT1.setSize(RT.width, RT.height);\n this.RT2.setSize(RT.width, RT.height);\n }\n\n this.box_blur_mat.uniforms._SampleDir.value.set(1, 0);\n Graphics.blit(RT, this.RT1, this.box_blur_mat);\n this.box_blur_mat.uniforms._SampleDir.value.set(0, 1);\n Graphics.blit(this.RT1, RT, this.box_blur_mat);\n // return this.RT2;\n }\n}\n\nexport { Blurrer };\n","import { CameraManager } from '../CameraManager';\nimport { Graphics } from '../Graphics';\nimport { OScreen } from '../OScreen';\nimport { SceneManager } from '../SceneManager';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor(use_ssaa = false)\n {\n super();\n\n this.ssao_mat = new SSAOMaterial();\n this.ssao_compose_mat = new SSAOComposeMaterial();\n this.debug_normals = new DisplayNormalTextureMaterial();\n\n this.ssaa = use_ssaa ? 2 : 1;\n\n this.main_RT = new WebGLRenderTarget(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n\n this.SSAO_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.blurrer = new Blurrer();\n Graphics.generateDepthNormalTexture = true;\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n this.__update_uniforms();\n\n Graphics.blit(Graphics.depth_normals_RT, this.SSAO_RT, this.ssao_mat);\n\n // // BLUR\n this.blurrer.blur(this.SSAO_RT);\n Graphics.blit(this.SSAO_RT, undefined);\n\n // // COMPOSE\n this.ssao_compose_mat.uniforms._AO.value = this.SSAO_RT.texture;\n Graphics.blit(this.main_RT, undefined, this.ssao_compose_mat);\n\n // Graphics.blit(this.SSAO_RT, undefined);\n }\n\n __update_uniforms()\n {\n this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._ProjectionMatrix.value.copy(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._FarPlane.value = CameraManager.current.far;\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width * this.ssaa || this.main_RT.height !== OScreen.height * this.ssaa)\n {\n this.main_RT.setSize(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n this.SSAO_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { NormalAORender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass NormalRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current);\n }\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n}\n\nexport { NormalRender };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/gaussian_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass GaussianBlurMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag, undefined, {\n KERNEL_RADIUS: kernel_radius,\n SIGMA: kernel_radius\n });\n\n this.uniforms.texSize = { value: new Vector2(0.5, 0.5) };\n this.uniforms.direction = { value: new Vector2(0.5, 0.5) };\n }\n\n set_size(w, h)\n {\n this.uniforms.texSize.value.x = w;\n this.uniforms.texSize.value.y = h;\n }\n\n set_direction(x, y)\n {\n this.uniforms.direction.value.set(x, y);\n }\n}\n\nexport { GaussianBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/luminosity_high_pass/luminosity_high_pass.frag';\n\nimport { Color } from 'three';\nclass LuminosityHighPassMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag);\n\n this.uniforms.luminosityThreshold = { value: 0.23 };\n this.uniforms.smoothWidth = { value: 0.01 };\n this.uniforms.defaultColor = { value: new Color('#000000') };\n this.uniforms.defaultOpacity = { value: 0.0 };\n }\n}\n\nexport { LuminosityHighPassMaterial };\n","import { GaussianBlurMaterial } from '../materials/GaussianBlurMaterial';\nimport { LuminosityHighPassMaterial } from '../materials/LuminosityHighPassMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three';\n\nclass GaussianBlurrer\n{\n constructor(nMips = 5)\n {\n this.current_width = 1;\n this.current_height = 1;\n\n this.separableBlurMaterials = [];\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n\n this.nMips = nMips;\n this.kernelSizeArray = [3, 5, 7, 9, 11];\n this.rt_pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n this.renderTargetBright = new WebGLRenderTarget(1, 1, this.rt_pars);\n this.renderTargetBright.texture.generateMipmaps = false;\n\n this.init_materials();\n this.init_RT();\n\n this.luminosity_high_pass_mat = new LuminosityHighPassMaterial();\n }\n\n blur(RT, use_luminosity_high_pass)\n {\n this.resize_RT(RT.width, RT.height);\n\n if (use_luminosity_high_pass)\n {\n Graphics.blit(RT, this.renderTargetBright, this.luminosity_high_pass_mat);\n }\n else\n {\n Graphics.blit(RT, this.renderTargetBright);\n }\n\n let inputRenderTarget = this.renderTargetBright;\n\n for (let i = 0; i < this.nMips; i++)\n {\n const mat = this.separableBlurMaterials[i];\n\n mat.set_direction(1, 0);\n Graphics.blit(inputRenderTarget, this.renderTargetsHorizontal[i], mat);\n\n mat.set_direction(0, 1);\n Graphics.blit(this.renderTargetsHorizontal[i], this.renderTargetsVertical[i], mat);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n }\n\n get_blurred_texture()\n {\n return this.renderTargetsHorizontal[0].texture;\n }\n\n get_blurred_RT()\n {\n return this.renderTargetsHorizontal[0];\n }\n\n init_RT()\n {\n this.dispose_RT();\n\n this.renderTargetBright.setSize(1, 1);\n\n for (let i = 0; i < this.nMips; i++)\n {\n const hor = new WebGLRenderTarget(1, 1, this.rt_pars);\n const ver = new WebGLRenderTarget(1, 1, this.rt_pars);\n\n hor.texture.generateMipmaps = false;\n ver.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(hor);\n this.renderTargetsVertical.push(ver);\n }\n }\n\n resize_RT(texture_width, texture_height)\n {\n if (this.current_width === texture_width && this.current_height === texture_height)\n {\n return;\n }\n\n this.current_width = texture_width;\n this.current_height = texture_height;\n\n let width = Math.round(texture_width / 2);\n let height = Math.round(texture_height / 2);\n\n this.renderTargetBright.setSize(width, height);\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.renderTargetsVertical[i].setSize(width, height);\n this.renderTargetsHorizontal[i].setSize(width, height);\n this.separableBlurMaterials[i].set_size(width, height);\n\n width = Math.round(width / 2);\n height = Math.round(height / 2);\n }\n }\n\n init_materials(texture_width, texture_height)\n {\n this.dispose_materials();\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.separableBlurMaterials.push(new GaussianBlurMaterial(this.kernelSizeArray[i]));\n }\n }\n\n dispose_materials()\n {\n for (let i = 0; i < this.separableBlurMaterials.length; i++)\n {\n this.separableBlurMaterials[i].dispose();\n }\n this.separableBlurMaterials.length = 0;\n }\n\n dispose_RT()\n {\n for (let i = 0; i < this.renderTargetsVertical.length; i++)\n {\n this.renderTargetsHorizontal[i].dispose();\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n\n this.renderTargetsHorizontal.length = 0;\n this.renderTargetsVertical.length = 0;\n }\n}\n\nexport { GaussianBlurrer };\n","import { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { UnrealBloomComposeMaterial } from '../materials/UnrealBloomComposeMaterial';\nimport { AddMaterial } from '../materials/AddMaterial';\n\nimport { WebGLRenderTarget } from 'three';\n\nimport { GaussianBlurrer } from '../render_utilities/GaussianBlurrer';\nimport { Graphics } from '../Graphics';\nimport { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\n\nclass UnrealBloomRender extends BaseRender\n{\n constructor()\n {\n super();\n\n this.bloom_compose_mat = undefined;\n\n this.main_RT = undefined;\n this.blur_RT = undefined;\n this.blurrer = undefined;\n\n this.add_mat = new AddMaterial();\n }\n\n on_enter()\n {\n this.blurrer = new GaussianBlurrer();\n this.main_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n this.blur_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.bloom_compose_mat = new UnrealBloomComposeMaterial(5);\n this.blurrer = new GaussianBlurrer(5);\n\n this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture);\n this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture);\n this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture);\n this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture);\n this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture);\n\n this.bloom_compose_mat.set_bloom_strength(1);\n this.bloom_compose_mat.set_bloom_radius(1);\n\n this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture);\n }\n\n set_bloom_strength(val)\n {\n this.bloom_compose_mat.set_bloom_strength(val);\n }\n\n set_bloom_radius(val)\n {\n this.bloom_compose_mat.set_bloom_radius(val);\n }\n\n set_tint_color_0(col_string)\n {\n this.bloom_compose_mat.set_tint_color_0(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.bloom_compose_mat.set_tint_color_1(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.bloom_compose_mat.set_tint_color_2(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.bloom_compose_mat.set_tint_color_3(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.bloom_compose_mat.set_tint_color_4(col_string);\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n // // BLUR\n this.blurrer.blur(this.main_RT, true);\n\n // Blur compose\n Graphics.material_pass(this.bloom_compose_mat, this.blurrer.renderTargetsHorizontal[0]);\n\n // Additive blend\n Graphics.blit(this.main_RT, undefined, this.add_mat);\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width || this.main_RT.height !== OScreen.height)\n {\n this.main_RT.setSize(OScreen.width, OScreen.height);\n this.blur_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { UnrealBloomRender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass VRRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n // Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current, Graphics._renderer.getRenderTarget());\n }\n\n this.render_spectator_camera();\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n\n render_spectator_camera()\n {\n const spectator_camera = CameraManager.spectator;\n\n if (spectator_camera && Graphics._renderer.xr.isPresenting)\n {\n // Copy the XR Camera's position and rotation, but use your\n // main camera's projection matrix\n const xrCam = Graphics._renderer.xr.getCamera(CameraManager.current);\n\n spectator_camera.projectionMatrix.copy(CameraManager.current.projectionMatrix);\n\n spectator_camera.position.copy(xrCam.position);\n spectator_camera.quaternion.copy(xrCam.quaternion);\n\n // we'll restore this later\n const currentRenderTarget = Graphics._renderer.getRenderTarget();\n\n // turn off the WebXR rendering\n Graphics._renderer.xr.isPresenting = false;\n\n // render to the canvas on our main display\n Graphics._renderer.setRenderTarget(null);\n Graphics._renderer.render(SceneManager.current, spectator_camera);\n\n // reset back to enable WebXR\n Graphics._renderer.setRenderTarget(currentRenderTarget);\n Graphics._renderer.xr.isPresenting = true;\n }\n }\n}\n\nexport { VRRender };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentControllerManager\n{\n constructor()\n {\n this.component_controllers = [];\n this.enabled_component_controllers = new Set();\n }\n\n update()\n {\n this.__set_component_controllers_opacities();\n\n for (const component_controller of this.enabled_component_controllers)\n {\n component_controller.update(TransitionManager.current_state_data);\n }\n }\n\n register_component_controller(component_controller)\n {\n this.component_controllers.push(component_controller);\n }\n\n enable_component_controller(component_controller)\n {\n this.enabled_component_controllers.add(component_controller);\n }\n\n disable_component_controller(component_controller)\n {\n this.enabled_component_controllers.delete(component_controller);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n if (this.component_controllers[i].name === component_name)\n {\n return this.component_controllers[i];\n }\n }\n console.error('[ViewComponentControllerManager.get] no component_controller found for: ', component_name);\n return undefined;\n }\n\n __set_component_controllers_opacities()\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n this.component_controllers[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_contorller_manager = new ViewComponentControllerManager();\nexport { view_component_contorller_manager as ViewComponentControllerManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { VCManager } from './view_components/VCManager';\nimport { ViewComponentControllerManager } from './view_components/ViewComponentControllerManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n TransitionManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n TransitionManager.fixed_update();\n\n this.time_accumulator -= Time.fixed_delta_time;\n }\n\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n VCManager.update();\n ViewComponentControllerManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n UI.update(); // update after new camera matrix has been calculated\n UI.render(this.graphics); // render ui layer on top\n\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n\n this.target_application.on_frame_end();\n\n this.frames_passed++;\n\n UI.clear();\n Debug.clear();\n }\n\n start()\n {\n if (this.is_running) return; // sanity check\n\n if (this.frames_passed === 0)\n {\n this.target_application.on_enter();\n }\n\n this.is_running = true;\n\n this.graphics._renderer.setAnimationLoop(this.update.bind(this));\n }\n\n stop()\n {\n if (this.is_running === false) return; // sanity check\n\n this.is_running = false;\n this.target_application.on_exit();\n\n this.graphics._renderer.setAnimationLoop(null);\n }\n\n set_state(new_state)\n {\n this.target_application.on_exit(this);\n this.target_application = new_state;\n this.target_application.on_enter(this);\n }\n\n dispose()\n {\n this.stop();\n this.frames_passed = 0;\n }\n}\n\nexport { RenderLoop };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentManager\n{\n constructor()\n {\n this.components = [];\n this.enabled_components = new Set();\n }\n\n update()\n {\n this.__set_components_opacities();\n\n for (const component of this.enabled_components)\n {\n component.update(TransitionManager.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n this.enabled_components.delete(component);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { ViewComponentManager } from './ViewComponentManager';\n\nclass ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n\n // this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n\n // this.hidden = false;\n\n ViewComponentManager.enable_component(this);\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n\n // this.hidden = true;\n\n ViewComponentManager.disable_component(this);\n }\n\n set_opacity(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ViewComponent };\n","import { ViewComponentControllerManager } from './ViewComponentControllerManager';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ViewComponentController\n{\n constructor({ name })\n {\n this.name = name;\n\n this.current_opacity = 0;\n this.hidden = true;\n\n ViewComponentControllerManager.register_component_controller(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n ViewComponentControllerManager.enable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_enter`);\n\n this.hidden = false;\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_component.update`);\n }\n\n on_exit()\n {\n ViewComponentControllerManager.disable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_exit`);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n WorkerToMain.push(`${this.name}_component.set_opacity`, [opacity]);\n this.toggle_hidden();\n }\n }\n\n toggle_hidden()\n {\n if (this.current_opacity > 0.0001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n}\n\nexport { ViewComponentController };\n","import { Mesh } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass HorizontalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n geometry.rotateX(-3.14 / 2);\n super(geometry, material);\n }\n}\n\nexport { HorizontalPlane };\n","import { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass VerticalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n super(geometry, material);\n }\n}\n\nexport { VerticalPlane };\n","class ArrayUtilities\n{\n constructor()\n {}\n\n static merge_from_to(source, target)\n {\n target.push.apply(target, source);\n }\n\n static expand_vec3_array(array, size)\n {\n const items_left_count = size - array.length;\n\n for (let i = 0; i < items_left_count; i++)\n {\n array.push(array[i].clone());\n }\n }\n\n static remove_elem(array, elem)\n {\n const index = array.indexOf(elem);\n if (index > -1)\n {\n array.splice(index, 1);\n }\n }\n\n static get_closest_point(points, target)\n {\n let closest_point = points[0];\n let closest_distance = closest_point.distanceTo(target);\n for (let i = 1; i < points.length; i++)\n {\n if (points[i].distanceTo(target) < closest_distance)\n {\n closest_point = points[i];\n closest_distance = points[i].distanceTo(target);\n }\n }\n return closest_point;\n }\n\n static object_values_to_array(obj)\n {\n const ids = Object.keys(obj);\n const arr = [];\n for (let i = 0; i < ids.length; i++)\n {\n arr.push(obj[ids[i]]);\n }\n return arr;\n }\n}\n\nexport { ArrayUtilities };\n","import { Line3, Plane, Quaternion, Sphere, Vector3 } from 'three';\n\nclass FrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = Math.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n let closest_up_point = undefined;\n let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n closest_up_point = points[i];\n }\n }\n\n console.log(closest_up_point, closest_down_point);\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n let closest_right_point = undefined;\n let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n console.log(closest_right_point, closest_left_point);\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { FrustumPointFitter };\n","import { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\n\nclass GeometryUtilities\n{\n static convert_to_non_indexed_geometry(geometry_buffer)\n {\n const indices = geometry_buffer.index;\n const positions = geometry_buffer.getAttribute('position');\n\n const bar_coordinates = [];\n const vertices = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n // VERTEX 1\n vertices.push(positions.getX(indices.array[i + 0]));\n vertices.push(positions.getY(indices.array[i + 0]));\n vertices.push(positions.getZ(indices.array[i + 0]));\n\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n // VERTEX 2\n\n vertices.push(positions.getX(indices.array[i + 1]));\n vertices.push(positions.getY(indices.array[i + 1]));\n vertices.push(positions.getZ(indices.array[i + 1]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n // VERTEX 3\n\n vertices.push(positions.getX(indices.array[i + 2]));\n vertices.push(positions.getY(indices.array[i + 2]));\n vertices.push(positions.getZ(indices.array[i + 2]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n\n const geometry = new BufferGeometry();\n // geometry.setAttribute('barycentric', new BufferAttribute( new Float32Array(bar_coordinates), 3 ));\n geometry.setAttribute('position', new BufferAttribute(new Float32Array(vertices), 3));\n GeometryUtilities.add_barycentric_attribute(geometry);\n return geometry;\n }\n\n static add_barycentric_attribute(non_indexed_geometry_buffer)\n {\n const bar_coordinates = [];\n const positions = non_indexed_geometry_buffer.getAttribute('position');\n\n for (let i = 0; i < positions.count; i += 3)\n {\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n non_indexed_geometry_buffer.setAttribute('barycentric', new BufferAttribute(new Float32Array(bar_coordinates), 3));\n }\n}\n\nexport { GeometryUtilities };\n","class HTMLUtilities\n{\n static load_images(container)\n {\n const images = container.querySelectorAll('img');\n\n for (let i = 0; i < images.length; i++)\n {\n const image = images[i];\n\n if (image.dataset.src)\n {\n image.src = image.dataset.src;\n }\n }\n\n const image_objects = container.querySelectorAll('object');\n\n for (let i = 0; i < image_objects.length; i++)\n {\n const image_object = image_objects[i];\n\n if (image_object.dataset.src)\n {\n image_object.data = image_object.dataset.src;\n }\n }\n }\n\n static load_videos(container)\n {\n const videos = container.querySelectorAll('video');\n\n for (let i = 0; i < videos.length; i++)\n {\n const video = videos[i];\n\n if (video.dataset.src)\n {\n video.src = video.dataset.src;\n }\n }\n }\n\n static load_iframes(container)\n {\n const iframes = container.querySelectorAll('iframe');\n\n for (let i = 0; i < iframes.length; i++)\n {\n const iframe = iframes[i];\n\n if (iframe.dataset.src)\n {\n iframe.src = iframe.dataset.src;\n }\n }\n }\n\n static load_elements(container, selector)\n {\n const elements = container.querySelectorAll(selector);\n\n for (let i = 0; i < elements.length; i++)\n {\n const element = elements[i];\n\n if (element.dataset.src)\n {\n element.src = element.dataset.src;\n }\n }\n }\n}\n\nexport { HTMLUtilities };\n","import { Vector4 } from 'three';\n\nclass ImageUtilities\n{\n constructor()\n { }\n\n static get_image_data(image)\n {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n\n const context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n return context.getImageData(0, 0, image.width, image.height);\n }\n\n static get_pixel(imagedata, x, y)\n {\n const position = (x + imagedata.width * y) * 4;\n const data = imagedata.data;\n return new Vector4(data[position + 0], data[position + 1], data[position + 2], data[position + 3]);\n }\n}\n\nexport { ImageUtilities };\n","import { Vector3 } from 'three';\nimport { Vector2 } from 'three';\nclass MeshSampler\n{\n constructor()\n {\n\n }\n\n sample(buffer_geometry, sample_count)\n {\n const face_areas = [];\n\n let min_area = 99999999;\n\n const vertices = buffer_geometry.getAttribute('position');\n const normals = buffer_geometry.getAttribute('normal');\n const tangents = buffer_geometry.getAttribute('tangent');\n const uvs = buffer_geometry.getAttribute('uv');\n const indices = buffer_geometry.index;\n\n const faces = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n const index_0 = indices.array[i + 0];\n const index_1 = indices.array[i + 1];\n const index_2 = indices.array[i + 2];\n\n const v1 = new Vector3();\n v1.x = vertices.getX(index_0);\n v1.y = vertices.getY(index_0);\n v1.z = vertices.getZ(index_0);\n\n const v2 = new Vector3();\n v2.x = vertices.getX(index_1);\n v2.y = vertices.getY(index_1);\n v2.z = vertices.getZ(index_1);\n\n const v3 = new Vector3();\n v3.x = vertices.getX(index_2);\n v3.y = vertices.getY(index_2);\n v3.z = vertices.getZ(index_2);\n\n const face = {\n a: v1,\n b: v2,\n c: v3\n };\n\n if (normals)\n {\n const n1 = new Vector3();\n n1.x = normals.getX(index_0);\n n1.y = normals.getY(index_0);\n n1.z = normals.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = normals.getX(index_1);\n n2.y = normals.getY(index_1);\n n2.z = normals.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = normals.getX(index_2);\n n3.y = normals.getY(index_2);\n n3.z = normals.getZ(index_2);\n\n const normal = n1.clone().add(n2).add(n3).normalize();\n face.normal = normal;\n }\n\n if (tangents)\n {\n const n1 = new Vector3();\n n1.x = tangents.getX(index_0);\n n1.y = tangents.getY(index_0);\n n1.z = tangents.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = tangents.getX(index_1);\n n2.y = tangents.getY(index_1);\n n2.z = tangents.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = tangents.getX(index_2);\n n3.y = tangents.getY(index_2);\n n3.z = tangents.getZ(index_2);\n\n const tangent = n1.clone().add(n2).add(n3).normalize();\n face.tangent = tangent;\n }\n if (uvs)\n {\n const uv_a = new Vector2();\n uv_a.x = uvs.getX(index_0);\n uv_a.y = uvs.getY(index_0);\n\n const uv_b = new Vector2();\n uv_b.x = uvs.getX(index_1);\n uv_b.y = uvs.getY(index_1);\n\n const uv_c = new Vector2();\n uv_c.x = uvs.getX(index_2);\n uv_c.y = uvs.getY(index_2);\n\n face.uv_a = uv_a;\n face.uv_b = uv_b;\n face.uv_c = uv_c;\n }\n\n faces.push(face);\n\n const area = this.get_face_area(face);\n min_area = Math.min(area, min_area);\n face_areas.push(area);\n }\n\n const normalized_faces_array = this.get_uniform_face_distribution(face_areas, min_area, faces);\n const selected_faces = this.select_random_faces(normalized_faces_array, sample_count);\n const sampled_data = this.sample_data_from_faces(selected_faces);\n return sampled_data;\n }\n\n sample_data_from_faces(faces)\n {\n const sampled_points = [];\n const sampled_normals = [];\n const sampled_tangents = [];\n const sampled_uvs = [];\n\n for (let i = 0; i < faces.length; i++)\n {\n const face = faces[i];\n\n const w1 = Math.random();\n const w2 = Math.random();\n\n sampled_points.push(this.sample_point_in_face(w1, w2, face.a, face.b, face.c).clone());\n if (face.normal)\n {\n sampled_normals.push(face.normal.clone());\n }\n if (face.tangent)\n {\n sampled_tangents.push(face.tangent.clone());\n }\n if (face.uv_a)\n {\n sampled_uvs.push(this.sample_point_in_face(w1, w2, face.uv_a, face.uv_b, face.uv_c).clone());\n }\n }\n return { points: sampled_points, normals: sampled_normals, tangents: sampled_tangents, uvs: sampled_uvs };\n }\n\n select_random_faces(faces, amount)\n {\n const selected_faces = [];\n for (let i = 0; i < amount; i++)\n {\n const random = Math.floor(Math.random() * faces.length);\n const selected_face = faces[random];\n\n selected_faces.push(selected_face);\n }\n\n return selected_faces;\n }\n\n get_uniform_face_distribution(face_areas, minimum_area, faces)\n {\n const extended_triangle_indices = [];\n for (let i = 0; i < face_areas.length; i++)\n {\n face_areas[i] /= minimum_area;\n const repetitions_needed = Math.floor(Math.round(face_areas[i]));\n for (let j = 0; j < repetitions_needed; j++)\n {\n extended_triangle_indices.push(faces[i]);\n }\n }\n return extended_triangle_indices;\n }\n\n get_face_area(face)\n {\n const vec1 = face.b.clone().sub(face.a);\n const vec2 = face.c.clone().sub(face.a);\n return vec1.cross(vec2).length() / 2;\n }\n\n sample_point_in_face(w1, w2, v1, v2, v3)\n {\n if (w1 + w2 > 1)\n {\n w1 = 1.0 - w1;\n w2 = 1.0 - w2;\n }\n\n const w3 = 1.0 - (w1 + w2);\n\n return v1.clone().multiplyScalar(w1).add(v2.clone().multiplyScalar(w2)).add(v3.clone().multiplyScalar(w3));\n }\n}\n\nconst mesh_sampler = new MeshSampler();\nexport { mesh_sampler as MeshSampler };\n","import { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Skeleton } from 'three';\n\nclass ModelUtilities\n{\n get_mesh(scene, result_callback)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n if (child.geometry)\n {\n child.geometry = new BufferGeometry().fromGeometry(child.geometry);\n }\n result_callback(child);\n }\n });\n }\n\n get_geometries(scene)\n {\n const geometries = [];\n\n this.get_mesh(scene, (child) =>\n {\n geometries.push(child.geometry);\n });\n return geometries;\n }\n\n assign_material(scene, material, name)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n // assign to all if no name is given\n if (name === undefined)\n {\n child.material = material;\n }\n else\n {\n // if name is given, assign only to that\n if (child.name === name)\n {\n child.material = material;\n }\n }\n }\n });\n }\n\n clone_animated_gltf(gltf)\n {\n const clone = {\n animations: gltf.animations,\n scene: gltf.scene.clone(true)\n };\n\n const skinnedMeshes = {};\n\n gltf.scene.traverse(node =>\n {\n if (node.isSkinnedMesh)\n {\n skinnedMeshes[node.name] = node;\n }\n });\n\n const cloneBones = {};\n const cloneSkinnedMeshes = {};\n\n clone.scene.traverse(node =>\n {\n if (node.isBone)\n {\n cloneBones[node.name] = node;\n }\n\n if (node.isSkinnedMesh)\n {\n cloneSkinnedMeshes[node.name] = node;\n }\n });\n\n for (const name in skinnedMeshes)\n {\n const skinnedMesh = skinnedMeshes[name];\n const skeleton = skinnedMesh.skeleton;\n const cloneSkinnedMesh = cloneSkinnedMeshes[name];\n\n const orderedCloneBones = [];\n\n for (let i = 0; i < skeleton.bones.length; ++i)\n {\n const cloneBone = cloneBones[skeleton.bones[i].name];\n orderedCloneBones.push(cloneBone);\n }\n\n cloneSkinnedMesh.bind(\n new Skeleton(orderedCloneBones, skeleton.boneInverses),\n cloneSkinnedMesh.matrixWorld);\n }\n\n return clone;\n }\n\n set_shadow_config(scene, cast, receive)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n child.castShadow = cast;\n child.receiveShadow = receive;\n }\n });\n }\n\n __find_object(scene, object_name, result_callback)\n {\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n result_callback(obj);\n }\n });\n }\n\n get_object(scene, object_name)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n object = obj;\n }\n });\n return object;\n }\n\n get_object_by_type(scene, object_type)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.constructor.name === object_type)\n {\n object = obj;\n }\n });\n return object;\n }\n}\n\nconst model_utilities = new ModelUtilities();\nexport { model_utilities as ModelUtilities };\n","class ObjectUtilities\r\n{\r\n static is_object(item)\r\n {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n static merge_deep(target, ...sources)\r\n {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (ObjectUtilities.is_object(target) && ObjectUtilities.is_object(source))\r\n {\r\n for (const key in source)\r\n {\r\n if (ObjectUtilities.is_object(source[key]))\r\n {\r\n if (!target[key]) Object.assign(target, { [key]: {} });\r\n ObjectUtilities.merge_deep(target[key], source[key]);\r\n }\r\n else\r\n {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return ObjectUtilities.merge_deep(target, ...sources);\r\n }\r\n\r\n static xml_to_json(xml)\r\n {\r\n // Create the return object\r\n let obj = {};\r\n\r\n if (xml.nodeType === 1)\r\n { // element\r\n // do attributes\r\n if (xml.attributes.length > 0)\r\n {\r\n obj['@attributes'] = {};\r\n for (let j = 0; j < xml.attributes.length; j++)\r\n {\r\n const attribute = xml.attributes.item(j);\r\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n else if (xml.nodeType === 3)\r\n { // text\r\n obj = xml.nodeValue;\r\n }\r\n\r\n // do children\r\n if (xml.hasChildNodes())\r\n {\r\n for (let i = 0; i < xml.childNodes.length; i++)\r\n {\r\n const item = xml.childNodes.item(i);\r\n const nodeName = item.nodeName;\r\n if (typeof (obj[nodeName]) === 'undefined')\r\n {\r\n obj[nodeName] = this.xml_to_json(item);\r\n }\r\n else\r\n {\r\n if (typeof (obj[nodeName].push) === 'undefined')\r\n {\r\n const old = obj[nodeName];\r\n obj[nodeName] = [];\r\n obj[nodeName].push(old);\r\n }\r\n obj[nodeName].push(this.xml_to_json(item));\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport { ObjectUtilities };\r\n","class StringUtilities\n{\n constructor()\n {}\n\n static get_random_color()\n {\n const hexValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n let hex = '#';\n\n for (let i = 0; i < 6; i++)\n {\n const index = Math.floor(Math.random() * hexValues.length);\n hex += hexValues[index];\n }\n\n return hex;\n }\n\n static capitalize(string)\n {\n const words = string.split(' ');\n\n for (let i = 0; i < words.length; i++)\n {\n words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n }\n\n return words.join(' ');\n }\n\n static capitalize_first_letter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n static snake_to_camelcase(string)\n {\n return string.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());\n }\n}\n\nexport { StringUtilities };\n","class TimeUtilities\n{\n constructor()\n {}\n\n // Converts a time string (00:00:00.45) into miliseconds\n time_str_to_ms(time_str)\n {\n time_str = time_str.split(':');\n\n let hours = Number(time_str[0]);\n hours = hours * 60 * 60 * 1000;\n\n let minutes = Number(time_str[1]);\n minutes = minutes * 60 * 1000;\n\n let seconds = Number(time_str[2]);\n seconds = seconds * 1000;\n\n return hours + minutes + seconds;\n }\n}\n\nexport { TimeUtilities };\n","import grid_frag from '../shaders/grid/grid.frag';\nimport grid_vert from '../shaders/grid/grid.vert';\n\nimport { GeometryUtilities } from '../utilities/GeometryUtilities';\n\nimport { Mesh } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass Grid extends Mesh\n{\n constructor()\n {\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Color('#919191') }\n },\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n extensions: { derivatives: true },\n transparent: true,\n depthWrite: false\n });\n\n const plane_geometry = new PlaneGeometry(100, 100, 100, 100);\n\n const non_indexed_geometry = GeometryUtilities.convert_to_non_indexed_geometry(plane_geometry);\n\n super(non_indexed_geometry, material);\n\n this.rotation.x = -3.14 / 2;\n }\n}\n\nexport { Grid };\n","import line_vs from '../shaders/basic_line/basic_line.vert';\nimport line_fs from '../shaders/basic_line/basic_line.frag';\n\nimport { Mesh } from 'three';\nimport { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass Line extends Mesh\n{\n constructor(points)\n {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));\n geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));\n\n const material = new ShaderMaterial({\n uniforms: {\n _Thickness: { value: 0.2 },\n _Length: { value: 0 },\n _ElapsedTime: { value: 0 },\n _Color: { value: new Color('#FF0000') }\n },\n vertexShader: line_vs,\n fragmentShader: line_fs,\n transparent: true,\n depthWrite: false,\n extensions: { derivatives: true }\n\n });\n\n super(geometry, material);\n\n if (points)\n {\n this.setup(points);\n }\n }\n\n setup(points)\n {\n const vertices = [];\n const next_position = [];\n const previous_position = [];\n const orientation = [];\n const coverage = [];\n let accumulated_length = 0;\n\n for (let i = 0; i < points.length; i++)\n {\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(1);\n\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(-1);\n\n const next_point = this.__get_next_position(points, i);\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n const previous_point = this.__get_previous_position(points, i);\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n coverage.push(accumulated_length);\n coverage.push(accumulated_length);\n\n if (i < points.length - 1)\n {\n accumulated_length += points[i].distanceTo(next_point);\n }\n }\n const vertexList = new Float32Array(vertices);\n const nextPositionList = new Float32Array(next_position);\n const previousPositionList = new Float32Array(previous_position);\n const orientationList = new Float32Array(orientation);\n const coverageList = new Float32Array(coverage);\n\n const indices = [];\n for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)\n {\n const index = (i * 2) + 1;\n indices.push(index);\n indices.push(index + 1);\n indices.push(index - 1);\n\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 1);\n }\n\n this.geometry.setIndex(indices);\n this.geometry.getAttribute('position').copy(new BufferAttribute(vertexList, 3));\n this.geometry.getAttribute('next_position').copy(new BufferAttribute(nextPositionList, 3));\n this.geometry.getAttribute('previous_position').copy(new BufferAttribute(previousPositionList, 3));\n this.geometry.getAttribute('orientation').copy(new BufferAttribute(orientationList, 1));\n this.geometry.getAttribute('coverage').copy(new BufferAttribute(coverageList, 1));\n\n this.geometry.getAttribute('position').needsUpdate = true;\n this.geometry.getAttribute('next_position').needsUpdate = true;\n this.geometry.getAttribute('previous_position').needsUpdate = true;\n this.geometry.getAttribute('orientation').needsUpdate = true;\n this.geometry.getAttribute('coverage').needsUpdate = true;\n\n this.material.uniforms._Length.value = accumulated_length;\n this._length = accumulated_length;\n }\n\n set thickness(value)\n {\n this.material.uniforms._Thickness.value = value;\n }\n\n get thickness()\n {\n return this.material.uniforms._Thickness.value;\n }\n\n __get_previous_position(points, i)\n {\n if (i === 0)\n {\n return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);\n }\n else\n {\n return points[i - 1];\n }\n }\n\n __get_next_position(points, i)\n {\n if (i === points.length - 1)\n {\n return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);\n }\n else\n {\n return points[i + 1];\n }\n }\n\n update()\n {\n }\n\n distance()\n {\n return this.accumulated_length;\n }\n\n total_length()\n {\n return this.accumulated_length;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n if (this.parent)\n {\n this.parent.remove(this);\n }\n }\n\n set color(col)\n {\n this.material.uniforms._Color.value.set(col);\n }\n\n get color()\n {\n return this.material.uniforms._Color.value;\n }\n\n copy_color(col)\n {\n this.material.uniforms._Color.value.copy(col);\n }\n}\n\nexport { Line };\n","import basic_texture_vert from '../shaders/basic_texture/basic_texture.vert';\nimport basic_texture_frag from '../shaders/basic_texture/basic_texture.frag';\n\nimport { Mesh } from 'three';\nimport { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { DoubleSide } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldImage extends Mesh\n{\n constructor(texture, pivot)\n {\n pivot = pivot || new Vector2(0, 0);\n const material = new ShaderMaterial({\n uniforms: {\n _MainTex: { value: texture },\n _ScreenAligned: { value: 0 },\n _Scale: { value: 1 },\n _Opacity: { value: 1 }\n },\n vertexShader: basic_texture_vert,\n fragmentShader: basic_texture_frag,\n transparent: true,\n depthWrite: false,\n side: DoubleSide\n });\n const geometry = new PlaneGeometry(1, 1, 1);\n geometry.translate(-pivot.x / 2, -pivot.y / 2, 0);\n const current_scale = texture.image.width / texture.image.height;\n geometry.scale(current_scale, 1, 1);\n super(geometry, material);\n this.current_scale = current_scale;\n this.geometry.computeBoundingBox();\n\n this.tmp_bb_size = new Vector3();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n update_texture()\n {\n this.material.uniforms._MainTex.value.needsUpdate = true;\n const img = this.material.uniforms._MainTex.value.image;\n\n this.geometry.scale(1 / this.current_scale, 1, 1);\n this.current_scale = img.width / img.height;\n this.geometry.scale(this.current_scale, 1, 1);\n this.geometry.computeBoundingBox();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n get size()\n {\n return this.tmp_bb_size.clone().multiplyScalar(this.scale.x);\n }\n\n set size(value)\n {\n this.scale.set(value, value, value);\n this.material.uniforms._Scale.value = value;\n }\n\n set screen_aligned(boolean)\n {\n this.material.uniforms._ScreenAligned.value = boolean === true ? 1 : 0;\n }\n\n get screen_aligned()\n {\n return this.material.uniforms._ScreenAligned.value === 1;\n }\n\n set opacity(opacity)\n {\n this.material.uniforms._Opacity.value = opacity;\n }\n\n get opacity()\n {\n return this.material.uniforms._Opacity.value;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.parent.remove(this);\n this.material.uniforms._MainTex.value.dispose();\n this.material.dispose();\n }\n}\n\nexport { WorldImage };\n","import { WorldImage } from './WorldImage';\nimport { SimpleTextDrawer } from '../canvas_drawer/SimpleTextDrawer';\n\nimport { LinearMipMapLinearFilter } from 'three';\nimport { LinearFilter } from 'three';\n\nclass Text2D extends WorldImage\n{\n constructor(text, font, color, pivot, is_static)\n {\n const simple_text_drawer = new SimpleTextDrawer(is_static);\n\n const draw_settings = {\n font: font,\n font_color: color || '#000000'\n };\n const canvas_texture = simple_text_drawer.draw_on_texture(text, draw_settings);\n\n canvas_texture.minFilter = LinearMipMapLinearFilter;\n canvas_texture.minFilter = LinearFilter;\n canvas_texture.needsUpdate = true;\n super(canvas_texture, pivot);\n\n this.simple_text_drawer = simple_text_drawer;\n this.canvas_texture = canvas_texture;\n this.draw_settings = draw_settings;\n }\n\n set text(value)\n {\n this.simple_text_drawer.draw_canvas(value, this.draw_settings);\n this.update_texture();\n }\n\n get text()\n {\n return 'not implemented';\n }\n}\n\nexport { Text2D };\n","import vert from '../shaders/ui_element/ui_element.vert';\nimport frag from '../shaders/ui_element/ui_element.frag';\n\nimport { BaseShaderMaterial } from '../materials/BaseShaderMaterial';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nimport { OScreen } from '../OScreen';\n\nclass UIElementMaterial extends BaseShaderMaterial\n{\n constructor(intensity = 1)\n {\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSize: { value: new Vector2(OScreen.width, OScreen.height) },\n _TextureSize: { value: new Vector2() },\n _PixelOffset: { value: new Vector2(0, 0) },\n _NDC: { value: new Vector3() },\n _PivotPoint: { value: new Vector2() },\n _DepthOffset: { value: 0 }\n });\n this.transparent = true;\n this.depthWrite = false;\n this.depthTest = false;\n }\n}\n\nexport { UIElementMaterial };\n","import { Vector2 } from 'three';\n\nclass ScreenSpacePosition\n{\n constructor()\n {\n this.tmp_vec = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n return this.tmp_vec.set(position.x, position.y);\n }\n}\n\nexport { ScreenSpacePosition };\n","import { CameraManager } from '../../CameraManager';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldSpacePosition\n{\n constructor()\n {\n this.tmp_vec3 = new Vector3();\n this.tmp_vec2 = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n this.tmp_vec3.copy(position);\n this.tmp_vec3.project(CameraManager.current);\n\n return this.tmp_vec2.set(this.tmp_vec3.x, this.tmp_vec3.y);\n }\n}\n\nexport { WorldSpacePosition };\n","class UIElementState\n{\n constructor()\n {\n\n }\n\n update(ui_element, normalized_mouse_position)\n {\n\n }\n\n on_enter(ui_element)\n {}\n\n on_exit(ui_element)\n {}\n}\n\nexport { UIElementState };\n","import { UIElementState } from './UIElementState';\n\nclass OnIdle extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_enter_state);\n }\n }\n}\n\nexport { OnIdle };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseEnter extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_enter();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_hover_state);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n}\n\nexport { OnMouseEnter };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseExit extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_exit();\n ui_element.set_state(ui_element._on_idle_state);\n }\n}\n\nexport { OnMouseExit };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseHover extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n this.__trigger_on_hover(ui_element);\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n this.__trigger_on_hover(ui_element);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n\n __trigger_on_hover(ui_element)\n {\n ui_element.on_mouse_hover();\n }\n}\n\nexport { OnMouseHover };\n","\nimport { OScreen } from '../OScreen';\n\nimport { UIElementMaterial } from '../materials/UIElementMaterial';\n\nimport { ScreenSpacePosition } from '../ui/ui_element_position/ScreenSpacePosition';\nimport { WorldSpacePosition } from '../ui/ui_element_position/WorldSpacePosition';\n\nimport { OnIdle } from '../ui/ui_element_state/OnIdle';\nimport { OnMouseEnter } from '../ui/ui_element_state/OnMouseEnter';\nimport { OnMouseExit } from '../ui/ui_element_state/OnMouseExit';\nimport { OnMouseHover } from '../ui/ui_element_state/OnMouseHover';\n\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\nimport { NearestFilter } from 'three';\nimport { Box2 } from 'three';\n\nclass UIElement extends Mesh\n{\n constructor(vert, frag)\n {\n super(new PlaneGeometry(1, 1), new UIElementMaterial());\n\n this.is_clickable = false;\n\n this.position_strategy = new WorldSpacePosition();\n this.current_state = new OnIdle();\n\n this._position = new Vector3();\n\n this._on_idle_state = new OnIdle();\n this._on_enter_state = new OnMouseEnter();\n this._on_exit_state = new OnMouseExit();\n this._on_hover_state = new OnMouseHover();\n\n this.on_enter = undefined;\n this.on_exit = undefined;\n this.on_hover = undefined;\n\n this.mouse_pos_tmp = new Vector2();\n this.cached_NDC_position = new Vector2();\n this.screen_pos_tmp = new Vector2();\n\n this.texture_size = new Vector2(1, 1);\n\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n this.renderOrder = 0;\n\n this.size = 1;\n this.pixel_offset = new Vector2();\n }\n\n set_render_order(value)\n {\n this.renderOrder = value;\n }\n\n get pivot_point()\n {\n return this.material.uniforms._PivotPoint.value;\n }\n\n set_pixel_offset(offset)\n {\n this.pixel_offset.copy(offset);\n this.material.uniforms._PixelOffset.value.copy(offset);\n }\n\n set_state(new_state)\n {\n this.current_state.on_exit(this);\n this.current_state = new_state;\n this.current_state.on_enter(this);\n }\n\n get position()\n {\n return this._position;\n }\n\n set use_depth(boolean)\n {\n this.material.depthTest = boolean;\n }\n\n get use_depth()\n {\n return this.material.depthTest;\n }\n\n set depth_offset(value)\n {\n this.material.uniforms._DepthOffset.value = value;\n }\n\n get depth_offset()\n {\n return this.material.uniforms._DepthOffset.value;\n }\n\n clear_state()\n {\n this.visible = false;\n }\n\n set_world_space_coordinate_system()\n {\n this.position_strategy = new WorldSpacePosition();\n }\n\n set_screen_space_coordinate_system()\n {\n this.position_strategy = new ScreenSpacePosition();\n }\n\n set_texture(texture)\n {\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.needsUpdate = true;\n\n this.texture_size.set(texture.image.width, texture.image.height);\n\n this.material.uniforms._MainTex.value = texture;\n this.get_size(this.material.uniforms._TextureSize.value);\n this.visible = true;\n }\n\n update_state(normalized_mouse_pos)\n {\n this.material.uniforms._ScreenSize.value.set(OScreen.width, OScreen.height);\n this.get_size(this.material.uniforms._TextureSize.value);\n\n this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position));\n this.material.uniforms._NDC.value.copy(this.position);\n this.current_state.update(this, normalized_mouse_pos);\n }\n\n is_mouse_over(normalized_mouse_pos)\n {\n this.screen_pos_tmp.copy(this.cached_NDC_position);\n this.to_screen_position(this.screen_pos_tmp);\n this.screen_pos_tmp.x += this.pixel_offset.x;\n this.screen_pos_tmp.y += this.pixel_offset.y;\n\n const rect = new Box2().setFromCenterAndSize(this.screen_pos_tmp, this.get_size());\n\n this.mouse_pos_tmp.copy(normalized_mouse_pos);\n this.to_screen_position(this.mouse_pos_tmp);\n\n return rect.containsPoint(this.mouse_pos_tmp);\n }\n\n to_screen_position(projected_pos)\n {\n projected_pos.x = (projected_pos.x * 0.5 + 0.5) * OScreen.width + this.pixel_offset.x;\n projected_pos.y = (projected_pos.y * 0.5 + 0.5) * OScreen.height + this.pixel_offset.y;\n }\n\n get_screen_space_position()\n {\n const pos = this.cached_NDC_position.clone();\n this.to_screen_position(pos);\n return pos;\n }\n\n set_screen_space_position(screen_pos)\n {\n this.position.x = (screen_pos.x / OScreen.width) * 2 - 1;\n this.position.y = (screen_pos.y / OScreen.height) * 2 - 1;\n }\n\n dispose()\n {\n if (this.material.uniforms._MainTex.value)\n {\n this.material.uniforms._MainTex.value.dispose();\n }\n // OScreen.remove_screen_material(this.material);\n this.geometry.dispose();\n this.material.dispose();\n }\n\n get_size(vector2)\n {\n if (vector2)\n {\n return vector2.copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n else\n {\n return new Vector2().copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n }\n\n on_mouse_enter()\n {}\n\n on_mouse_exit()\n {}\n\n on_mouse_hover()\n {}\n}\n\nexport { UIElement };\n","import { Mesh } from 'three';\n\nclass UpdatableMaterialMesh extends Mesh\n{\n constructor(geometry, material)\n {\n super(geometry, material);\n\n const self = this;\n\n this.onBeforeRender = () =>\n {\n self.material.update();\n };\n }\n}\n\nexport { UpdatableMaterialMesh };\n","import { Vector2, Vector4 } from 'three';\n\nclass TextGlyph\n{\n constructor(offset, plane_bounds, atlas_bounds)\n {\n const width = plane_bounds.right - plane_bounds.left;\n const height = plane_bounds.top - plane_bounds.bottom;\n\n this.scale = new Vector2(width, height);\n this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);\n\n this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);\n }\n}\n\nexport { TextGlyph };\n","import { Vector3, Quaternion, Matrix4, Color, Box2, Vector2 } from 'three';\nimport { TextGlyph } from './TextGlyph';\n\nclass SDFText\n{\n constructor(glyph_layout, text = '')\n {\n this.glyph_layout = glyph_layout;\n\n this.glyphs = [];\n\n this.glyph_is_dirty = true;\n this.matrix_is_dirty = true;\n this.color_is_dirty = true;\n\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n\n this.color = new Color('#FFFFFF');\n\n this.pivot_point = new Vector2();\n this.__opacity = 1;\n\n this.__text = text;\n\n this.__generate_glyphs(text);\n }\n\n set text(value)\n {\n this.__text = value;\n this.__generate_glyphs(value);\n this.matrix_is_dirty = true;\n }\n\n get text()\n {\n return this.__text;\n }\n\n update_matrix()\n {\n this.matrix.compose(this.position, this.quaternion, this.scale);\n this.matrix_is_dirty = false;\n this.glyph_is_dirty = true;\n }\n\n clear_glyph_dirty()\n {\n this.glyph_is_dirty = false;\n }\n\n clear_color_dirty()\n {\n this.color_is_dirty = false;\n }\n\n set_rotation(orientation = 0, tilt = 0) // 0..360, -90..0..90\n {\n const new_orientation = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), (orientation / 360) * Math.PI * 2);\n const new_tilt = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), (-tilt / 360) * Math.PI * 2);\n\n this.quaternion.copy(new_orientation.multiply(new_tilt));\n this.matrix_is_dirty = true;\n }\n\n set_position(pos)\n {\n this.position.copy(pos);\n this.matrix_is_dirty = true;\n }\n\n set_size(size)\n {\n this.scale.set(size, size, size);\n this.matrix_is_dirty = true;\n }\n\n set_color(col)\n {\n this.color.set(col);\n this.color_is_dirty = true;\n }\n\n set_pivot(pivot)\n {\n this.pivot_point.copy(pivot);\n this.update_glyphs();\n }\n\n set opacity(op)\n {\n this.__opacity = op;\n this.color_is_dirty = true;\n }\n\n get opacity()\n {\n return this.__opacity;\n }\n\n update_glyphs()\n {\n this.__generate_glyphs(this.text);\n }\n\n __generate_glyphs(text)\n {\n let cursor = 0;\n\n this.glyphs.length = 0;\n\n for (let i = 0; i < text.length; i++)\n {\n const unicode = text.charCodeAt(i);\n const glyph = this.glyph_layout.find(element => element.unicode === unicode);\n if (glyph)\n {\n if (glyph.planeBounds)\n {\n const text_glyph = new TextGlyph(cursor, glyph.planeBounds, glyph.atlasBounds);\n this.glyphs.push(text_glyph);\n }\n cursor += glyph.advance;\n }\n }\n\n const box2 = new Box2();\n const first_glyph = this.glyphs[0];\n box2.setFromCenterAndSize(first_glyph.position.clone().add(new Vector2(first_glyph.scale.x / 2, first_glyph.scale.y / 2)), first_glyph.scale);\n\n for (let i = 1; i < this.glyphs.length; i++)\n {\n const g = this.glyphs[i];\n const box = new Box2().setFromCenterAndSize(g.position.clone().add(new Vector2(g.scale.x / 2, g.scale.y / 2)), g.scale);\n box2.union(box);\n }\n\n const box2_size = new Vector2();\n box2.getSize(box2_size);\n for (let i = 0; i < this.glyphs.length; i++)\n {\n this.glyphs[i].position.x -= box2_size.x / 2;\n this.glyphs[i].position.y -= box2_size.y / 2;\n\n this.glyphs[i].position.x += (box2_size.x / 2) * this.pivot_point.x;\n this.glyphs[i].position.y += (box2_size.y / 2) * this.pivot_point.y;\n }\n\n this.glyph_is_dirty = true;\n }\n}\n\nexport { SDFText };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\n\nimport frag from '../shaders/sdf_text/sdf_text.frag';\nimport vert from '../shaders/sdf_text/sdf_text.vert';\n\nimport { Vector2, DoubleSide, LinearFilter } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass SDFTextMaterial extends BaseShaderMaterial\n{\n constructor(texture)\n {\n super(vert, frag, {\n _Texture: { value: texture },\n _Boldness: { value: 0.5 },\n _AtlasSize: { value: new Vector2(1, 1) }\n });\n\n this.transparent = true;\n this.extensions = {\n derivatives: true\n };\n this.depthWrite = false;\n this.side = DoubleSide;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipMaps = false;\n }\n\n set_atlas_size(size)\n {\n this.uniforms._AtlasSize.value.copy(size);\n }\n\n set_boldness(value)\n {\n this.uniforms._Boldness.value = OMath.lerp(0.5, 0.2, value);\n }\n}\n\nexport { SDFTextMaterial };\n","import { SDFText } from './SDFText';\nimport { SDFTextMaterial } from '../../materials/SDFTextMaterial';\nimport { ArrayUtilities } from '../../utilities/ArrayUtilities';\n\nimport {\n PlaneGeometry,\n Mesh,\n Vector2,\n InstancedBufferGeometry,\n InstancedBufferAttribute,\n Float32BufferAttribute,\n DynamicDrawUsage\n} from 'three';\n\nclass SDFTextBatch extends Mesh\n{\n constructor(font_layout, atlas_texture)\n {\n const max_allocations = 2000;\n\n const instanced_geometry = new InstancedBufferGeometry();\n instanced_geometry.instanceCount = 0;\n\n const geometry = new PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));\n instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));\n instanced_geometry.index = geometry.index;\n\n const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n transformsCol0.usage = DynamicDrawUsage;\n transformsCol1.usage = DynamicDrawUsage;\n transformsCol2.usage = DynamicDrawUsage;\n transformsCol3.usage = DynamicDrawUsage;\n glyph_bounds.usage = DynamicDrawUsage;\n plane_bounds.usage = DynamicDrawUsage;\n color.usage = DynamicDrawUsage;\n\n instanced_geometry.setAttribute('transformsCol0', transformsCol0);\n instanced_geometry.setAttribute('transformsCol1', transformsCol1);\n instanced_geometry.setAttribute('transformsCol2', transformsCol2);\n instanced_geometry.setAttribute('transformsCol3', transformsCol3);\n\n instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);\n instanced_geometry.setAttribute('plane_bounds', plane_bounds);\n instanced_geometry.setAttribute('color', color);\n\n super(instanced_geometry, new SDFTextMaterial(atlas_texture));\n\n this.text_elements = [];\n this.font_layout = font_layout;\n\n this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));\n\n this.frustumCulled = false;\n }\n\n set_boldness(value)\n {\n this.material.set_boldness(value);\n }\n\n add_text(text_str)\n {\n const elem = new SDFText(this.font_layout.glyphs, text_str);\n this.text_elements.push(elem);\n return elem;\n }\n\n remove_text(text_elem)\n {\n ArrayUtilities.remove_elem(this.text_elements, text_elem);\n this.update(true);\n }\n\n update(force_update)\n {\n const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');\n const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');\n\n const transformsCol0 = this.geometry.getAttribute('transformsCol0');\n const transformsCol1 = this.geometry.getAttribute('transformsCol1');\n const transformsCol2 = this.geometry.getAttribute('transformsCol2');\n const transformsCol3 = this.geometry.getAttribute('transformsCol3');\n\n const color_atr = this.geometry.getAttribute('color');\n\n let matrix_needs_update = force_update === true;\n let glyph_needs_update = force_update === true;\n let color_needs_update = force_update === true;\n\n let glyph_count = 0;\n for (let i = 0; i < this.text_elements.length; i++)\n {\n const text = this.text_elements[i];\n\n if (text.matrix_is_dirty)\n {\n matrix_needs_update = true;\n text.update_matrix();\n }\n\n if (text.glyph_is_dirty)\n {\n glyph_needs_update = true;\n text.clear_glyph_dirty();\n }\n\n if (text.color_is_dirty)\n {\n color_needs_update = true;\n text.clear_color_dirty();\n }\n\n const matrix = text.matrix;\n const color = text.color;\n const opacity = text.opacity;\n\n for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)\n {\n const glyph = text.glyphs[glyph_i];\n\n const buffer_i = glyph_count;\n\n glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);\n plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);\n\n transformsCol0.setXYZW(buffer_i, matrix.elements[0],\n matrix.elements[1],\n matrix.elements[2],\n matrix.elements[3]);\n\n transformsCol1.setXYZW(buffer_i, matrix.elements[4],\n matrix.elements[5],\n matrix.elements[6],\n matrix.elements[7]);\n\n transformsCol2.setXYZW(buffer_i, matrix.elements[8],\n matrix.elements[9],\n matrix.elements[10],\n matrix.elements[11]);\n\n transformsCol3.setXYZW(buffer_i, matrix.elements[12],\n matrix.elements[13],\n matrix.elements[14],\n matrix.elements[15]);\n\n color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);\n\n glyph_count++;\n }\n }\n\n this.geometry.instanceCount = glyph_count;\n\n if (glyph_count > this.max_allocations)\n {\n console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);\n }\n\n if (matrix_needs_update)\n {\n transformsCol0.needsUpdate = true;\n transformsCol1.needsUpdate = true;\n transformsCol2.needsUpdate = true;\n transformsCol3.needsUpdate = true;\n }\n if (glyph_needs_update)\n {\n glyph_bounds_atr.needsUpdate = true;\n plane_bounds_atr.needsUpdate = true;\n }\n if (color_needs_update)\n {\n color_atr.needsUpdate = true;\n }\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\n\nexport { SDFTextBatch };\n","import { ActionInterpolator } from './ActionInterpolator';\n\nclass VectorInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n }\n\n update(context, t)\n {\n const tmp = this.from.clone();\n tmp.lerp(this.to, this.easing_function(t));\n context[this.attribute_name].copy(tmp);\n }\n}\n\nexport { VectorInterpolator };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport downsample_frag from '../shaders/dual_filter_blur/downsample.frag';\nimport upsample_frag from '../shaders/dual_filter_blur/upsample.frag';\n\nclass DualFilteringBlurMaterial extends BlitMaterial\n{\n constructor(upsample)\n {\n super(upsample ? upsample_frag : downsample_frag);\n }\n}\n\nexport { DualFilteringBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/dual_filter_blur/alpha_filter.frag';\n\nclass AlphaFilterMaterial extends BlitMaterial\n{\n constructor(use_alpha_mask, upsample)\n {\n super(frag);\n }\n\n set offset(value)\n {\n this.uniforms._Offset.value = value;\n }\n\n get offset()\n {\n return this.uniforms._Offset.value;\n }\n}\n\nexport { AlphaFilterMaterial };\n","import { DualFilteringBlurMaterial } from '../materials/DualFilteringBlurMaterial';\nimport { AlphaFilterMaterial } from '../materials/AlphaFilterMaterial';\nimport { Graphics } from '../Graphics';\nimport { WebGLRenderTarget } from 'three';\nclass DualFilteringBlurrer\n{\n constructor(use_alpha_mask)\n {\n this.current_width = 1;\n this.current_height = 1;\n this.RT0 = new WebGLRenderTarget(1, 1);\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.RT3 = new WebGLRenderTarget(1, 1);\n this.RT4 = new WebGLRenderTarget(1, 1);\n\n this.upscale_blur_mat = new DualFilteringBlurMaterial(true);\n this.downscale_blur_mat = new DualFilteringBlurMaterial(false);\n\n this.alpha_filter_mat = new AlphaFilterMaterial();\n }\n\n blur(RT)\n {\n this.check_RT_resize(RT.width, RT.height);\n Graphics.blit(RT, this.RT1, this.alpha_filter_mat);\n\n // Graphics.blit(this.RT0, this.RT1, this.downscale_blur_mat);\n Graphics.blit(this.RT1, this.RT2, this.downscale_blur_mat);\n Graphics.blit(this.RT2, this.RT3, this.downscale_blur_mat);\n Graphics.blit(this.RT3, this.RT4, this.downscale_blur_mat);\n\n // Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n // Graphics.blit(this.RT3, this.RT4, this.upscale_blur_mat);\n Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n Graphics.blit(this.RT3, this.RT2, this.upscale_blur_mat);\n Graphics.blit(this.RT2, RT, this.upscale_blur_mat);\n // Graphics.blit(this.RT1, RT, this.upscale_blur_mat);\n\n // return this.RT2;\n }\n\n check_RT_resize(width, height)\n {\n if (this.current_width !== width || this.current_height !== height)\n {\n this.current_width = width;\n this.current_height = height;\n this.RT0.setSize(this.current_width / 2, this.current_height / 2);\n this.RT1.setSize(this.current_width / 2, this.current_height / 2);\n this.RT2.setSize(this.current_width / 4, this.current_height / 4);\n this.RT3.setSize(this.current_width / 8, this.current_height / 8);\n this.RT4.setSize(this.current_width / 16, this.current_height / 16);\n }\n }\n}\n\nexport { DualFilteringBlurrer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/median_filter/median_filter.frag';\n\nimport { Vector2 } from 'three';\n\nclass MedianFilterMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, undefined, {\n kernel3x3: true\n });\n\n this.uniforms._SourceTex = { value: undefined };\n this.uniforms._SourceTexSize = { value: new Vector2(1, 1) };\n }\n\n set_texture(tex)\n {\n this.uniforms._SourceTex.value = tex;\n\n const size = this.get_size(tex);\n this.uniforms._SourceTexSize.value.copy(size);\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilterMaterial };\n","import { MedianFilterMaterial } from '../materials/MedianFilterMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, Vector2, RGBAFormat, FloatType, NearestFilter } from 'three';\n\nclass MedianFilter\n{\n constructor(renderer)\n {\n this.RT = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.RT1 = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n\n this.median_filter_mat = new MedianFilterMaterial();\n }\n\n filter(texture)\n {\n const tex_size = this.get_size(texture);\n if (tex_size.x !== this.RT.width || tex_size.y !== this.RT.height)\n {\n this.RT.setSize(tex_size.x, tex_size.y);\n this.RT1.setSize(tex_size.x, tex_size.y);\n }\n\n this.median_filter_mat.set_texture(texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n\n for (let i = 0; i < 0; i++)\n {\n this.median_filter_mat.set_texture(this.RT.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT1);\n\n this.median_filter_mat.set_texture(this.RT1.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n }\n\n return this.RT;\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilter };\n","import { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, LinearSRGBColorSpace, NearestFilter, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBFormat } from 'three';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBFormat } from 'three';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeBufferGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nclass AsyncTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size, flipY = true, premultiplyAlpha = false, colorSpaceConversion = true)\r\n {\r\n super(resource_id, url, size);\r\n\r\n this.original_url = '';\r\n\r\n this.colorSpaceConversion = colorSpaceConversion;\r\n this.premultiplyAlpha = premultiplyAlpha;\r\n this.flipY = flipY;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (Browser.is_safari) // && Browser.version < 15\r\n {\r\n this.load_with_old_method(resource_container);\r\n }\r\n else\r\n {\r\n this.load_with_new_method(resource_container);\r\n }\r\n }\r\n\r\n load_with_old_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const texture = new Texture();\r\n const image = new Image();\r\n\r\n image.src = this.url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('The source image could not be decoded.', this.original_url);\r\n };\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n load_with_new_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const fetchOptions = {};\r\n fetchOptions.credentials = 'same-origin';\r\n // fetchOptions.headers = this.requestHeader;\r\n\r\n fetch(this.url, fetchOptions).then((res) =>\r\n {\r\n return res.blob();\r\n }).then((blob) =>\r\n {\r\n return createImageBitmap(blob, {\r\n colorSpaceConversion: this.colorSpaceConversion ? 'default' : 'none',\r\n imageOrientation: this.flipY ? 'flipY' : 'none',\r\n premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none'\r\n });\r\n }).then((imageBitmap) =>\r\n {\r\n const texture = new Texture(imageBitmap);\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }).catch((e) =>\r\n {\r\n console.error(e, this.original_url);\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { AsyncTextureLoader };\r\n","import { Audio as TAudio } from 'three';\nimport { PositionalAudio as TPositionalAudio } from 'three';\n\nclass AudioClip\n{\n constructor(buffer, loop = true, volume = 1, positional = false)\n {\n this.buffer = buffer;\n this.loop = loop;\n this.volume = volume;\n this.positional = positional;\n\n this.audio = undefined;\n }\n\n init(audio_listener)\n {\n if (this.positional)\n {\n this.audio = new TPositionalAudio(audio_listener);\n }\n else\n {\n this.audio = new TAudio(audio_listener);\n }\n\n this.audio.setBuffer(this.buffer);\n this.audio.setLoop(this.loop);\n\n // This prevents undesired volume at the beginning of playing\n this.audio.gain.gain.value = 0;\n\n this.audio.setVolume(this.loop ? 0 : this.volume);\n }\n\n play()\n {\n this.audio.play();\n }\n\n pause()\n {\n this.audio.pause();\n }\n\n stop()\n {\n this.audio.stop();\n }\n\n get is_playing()\n {\n return this.audio.isPlaying;\n }\n}\n\nexport { AudioClip };\n","import { AudioContext } from 'three';\r\n\r\nimport { AudioClip } from '../components/AudioClip';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nclass AudioLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loop = true, volume = 0, size, positional = false)\r\n {\r\n super(resource_id, url, size);\r\n this.loop = loop;\r\n this.volume = volume;\r\n this.positional = positional;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n // if (!window.user_interaction_for_audio)\r\n // {\r\n // setTimeout(this.on_preloaded_finished.bind(this, resource_container), 100);\r\n // }\r\n // else\r\n // {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.instantiate_audio(resource_container);\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n // }\r\n }\r\n\r\n instantiate_audio(resource_container)\r\n {\r\n const context = AudioContext.getContext();\r\n\r\n const buffer = context.createBuffer(2, 22050, 44100);\r\n\r\n fetch(this.url).then(r => r.blob()).then((response) =>\r\n {\r\n if (response.arrayBuffer)\r\n {\r\n response.arrayBuffer().then((array_buffer) =>\r\n {\r\n context.decodeAudioData(array_buffer, (audio_buffer) =>\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(audio_buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n });\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport { AudioLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\r\n\r\nclass DAELoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new ColladaLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { DAELoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass FileLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (file) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, file);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { FileLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { FontLoader as TFontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\n\nclass FontLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TFontLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (font) =>\n {\n resource_container.set_resource(this.resource_id, this.url, font);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { FontLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFDRACOLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loader, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new GLTFLoader();\r\n\r\n this.loader.setDRACOLoader(loader);\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFDRACOLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader as TGLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TGLTFLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\nimport { UnsignedByteType } from 'three';\r\n\r\nclass HDRCubeTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new THDRCubeTextureLoader();\r\n this.url_suffix = ['/px.hdr', '/nx.hdr', '/py.hdr', '/ny.hdr', '/pz.hdr', '/nz.hdr'];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.setPath(this.url)\r\n .setDataType(UnsignedByteType)\r\n .load(this.url_suffix, (hdr) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, hdr);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { HDRCubeTextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass JSONLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.json().then((json) =>\n {\n resource_container.set_resource(this.resource_id, this.url, json);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { JSONLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { OBJLoader as TOBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\n\nclass OBJLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TOBJLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (obj) =>\n {\n resource_container.set_resource(this.resource_id, this.url, obj);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { OBJLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { Vector3 } from 'three';\nimport { FileLoader } from 'three';\n\nclass PointArrayLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new FileLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (text) =>\n {\n resource_container.set_resource(this.resource_id, this.url, this.parse_path(text));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n\n parse_path(raw_data)\n {\n const string_array = raw_data.split('\\n');\n\n if (string_array[string_array.length - 1] === '')\n {\n string_array.pop();\n }\n\n const positions = [];\n\n for (let i = 0; i < string_array.length; i += 3)\n {\n const x = parseFloat(string_array[i + 0]);\n const y = parseFloat(string_array[i + 1]);\n const z = parseFloat(string_array[i + 2]);\n positions.push(new Vector3(x, y, z));\n }\n return positions;\n // let curve = new THREE.CatmullRomCurve3(positions);\n // return curve.getPoints(100);\n }\n}\n\nexport { PointArrayLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\n\nclass RGBETextureLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new RGBELoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (hdr) =>\n {\n resource_container.set_resource(this.resource_id, this.url, hdr);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { RGBETextureLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass TextLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { Texture } from 'three';\r\n\r\nclass TextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n response.blob().then((blob) =>\r\n {\r\n const texture = new Texture();\r\n\r\n const url = URL.createObjectURL(blob);\r\n\r\n const image = new Image();\r\n image.src = url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('Error loading texture. Maybe the resource is not an image?', this.url);\r\n };\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass VideoLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.blob().then((blob) =>\n {\n resource_container.set_resource(this.resource_id, this.url, URL.createObjectURL(blob));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { VideoLoader };\n","import { ResourceContainer } from '../ResourceContainer';\r\n\r\nclass ResourceBatch\r\n{\r\n constructor(batch_name)\r\n {\r\n this.resource_loaders = [];\r\n this.batch_name = batch_name || 'unnamed batch';\r\n }\r\n\r\n add_loader(loader)\r\n {\r\n this.resource_loaders.push(loader);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n this.resource_loaders[i].load(resource_container || ResourceContainer);\r\n }\r\n }\r\n\r\n get loading_finished()\r\n {\r\n let finished = true;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n finished = finished && this.resource_loaders[i].has_finished;\r\n }\r\n return finished;\r\n }\r\n\r\n get has_errors()\r\n {\r\n let has_error = false;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n has_error = has_error || this.resource_loaders[i].has_error;\r\n }\r\n return has_error;\r\n }\r\n\r\n print_errors()\r\n {\r\n console.error('Batch <' + this.batch_name + '> could not load successfully');\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n if (this.resource_loaders[i].has_error)\r\n {\r\n this.resource_loaders[i].print_error();\r\n }\r\n }\r\n }\r\n\r\n get_progress()\r\n {\r\n return this.get_loaded_bytes() / this.get_total_bytes();\r\n }\r\n\r\n get_loaded_bytes()\r\n {\r\n let loaded_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n loaded_bytes += this.resource_loaders[i].loaded_bytes;\r\n }\r\n\r\n return loaded_bytes;\r\n }\r\n\r\n get_total_bytes()\r\n {\r\n let total_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n total_bytes += this.resource_loaders[i].total_bytes;\r\n }\r\n\r\n return total_bytes;\r\n }\r\n}\r\n\r\nexport { ResourceBatch };\r\n"],"names":["BaseApplication","on_post_start","on_enter","on_exit","before_update","update","fixed_update","on_post_render","on_pre_render","on_frame_end","dispose","BlitMaterial","ShaderMaterial","constructor","frag_shader","vert_shader","defines","super","uniforms","_MainTex","value","_Resolution","Vector2","_TargetResolution","vertexShader","fragmentShader","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","this","_SecondTex","undefined","set_add_texture","tex","BaseShaderMaterial","vert","frag","basic_vert","basic_frag","_Color","Color","UnrealBloomComposeMaterial","NUM_MIPS","_BlurredTex","_BloomStrength","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","bloomStrength","bloomFactors","bloomRadius","bloomTintColors","set_RT_0","rt","set_RT_1","set_RT_2","set_RT_3","set_RT_4","set_bloom_strength","set_bloom_radius","set_tint_color_0","col_string","set","set_tint_color_1","set_tint_color_2","set_tint_color_3","set_tint_color_4","BaseRender","render","context","renderer","resize","browser","init","opr","chrome","browser_name","agent","navigator","userAgent","toLowerCase","vr_browser_keywords","vr_browser_name","find","keyword","includes","has_web_xr_support","indexOf","version","get_version","name","is_safari","is_chrome","is_edge","is_edge_chromium","is_vr","has_webm","is_firefox","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","replace","appName","appVersion","splice","Number","split","Validation","is_int","n","is_float","is_number","is_json","str","JSON","parse","e","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","Browser","fetch","method","mode","credentials","redirect","then","on_progress","bind","catch","__on_error","set_resource","response","response_clone","clone","reader","body","getReader","contentLength","headers","get","receivedLength","done","read","length","on_preloaded_finished","data","view_manager","views","main_to_worker","browser_title_suffix","go_to_view","view_name","change_url","skip","v","__change_browser_url","__change_browser_title","post","view_controller_name","go_to_scene","scene_name","transition_view","set_next_view_name","set_browser_title_suffix","title_suffix","i","get_by_url","register_view","view","push","set_main_to_worker","window","history","pushState","title","__capitalize","document","string","aux_string","toUpperCase","__snake_to_whitespace","group","ViewState","start","show","hide","before_enter","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","before_exit","ApplicationView","container","ViewManager","classList","add","remove","set_opacity","opacity","style","ActionEvent","args","trigger","ViewApi","application","OMath","linear_map","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","between","min","max","mod","number","divisor","rgb_to_hex","rgb","r","Math","round","toString","g","b","project_points_on_plane","points","plane","projected_point","Vector3","points_on_plane","projectPoint","matrix4_lerp","from","to","target","t","elements","lerp","equals","x1","x2","abs","x","y","clamp","euclideanModulo","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","w","z","points_average","center","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","transitions_velocity","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","stringify","tmp_t","channels","channel_names","Object","keys","duration","play","stop","reset","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","get_progress","is_finished","add_action_event","trigger_time","action","add_action_interpolator","interpolator","use_dynamic_from_value","keyframes","attribute_name","keyframe","get_current_target_value","__get_current_keyframe","evaluate","get_current_starting_value","get_current_progress","__linear_map_01","easing_function","__play_events","evaluate_keyframe","log","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","NumberInterpolator","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","getAttribute","get_node_x_position","parseFloat","split_data","trigger_name","trigger_method","at_time","value_data","to_value","from_time","to_time","sort","a","x_pos","ActionSequencerBuilder","default_state_data","from_animation_sheet","animation_data","current_context","tracks","initial_tracks","state_to_tracks","get_longest_time","element","sequencer","action_event","state","longest_time","from_draw_io","xml","transition_data","track_time","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","set_transitions_velocity","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","transition_manager","transition_handler","ViewControllerManager","view_controllers","go_to_view_controller","TransitionManager","__set_view_controllers_opacities","register_view_controller","view_controller","set_view_controller","get_current_view_controller","v_c_manager","worker_to_main","methods","clear","ApplicationViewController","current_opacity","VCManager","WorkerToMain","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getContext","getFontHeight","fontStyle","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","removeChild","get_text_size","text","font","ceil","measureText","width","draw_canvas","ctxOptions","font_color","__draw","draw_on_texture","canvas_texture","CanvasTexture","UVMapping","ClampToEdgeWrapping","NearestFilter","generateMipMaps","needsUpdate","roundRect","height","radius","fill","stroke","tl","tr","br","bl","defaultRadius","side","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","SimpleTextDrawer","text_margin","text_size","clearRect","globalAlpha","fillStyle","fillRect","textBaseline","textAlign","fillText","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","AxisHelper","Object3D","scale","blue_points","blue_axis_mat","LineBasicMaterial","color","blue_axis_geo","BufferGeometry","setFromPoints","blue_axis_line","Line","renderOrder","green_points","green_axis_mat","green_axis_geo","green_axis_line","red_points","red_axis_mat","red_axis_geo","red_axis_line","scene_manager","Scene","add_scene","scene","traverse","child","geometry","material","children","Cube","Mesh","segments","BoxGeometry","MeshBasicMaterial","Sphere","SphereBufferGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderBufferGeometry","translate","cone_geometry","ConeBufferGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeBufferGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","position","render_width","render_height","width_height","dpr","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","image","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","draw_line_2D","strokeStyle","draw_line","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","depth","distanceTo","sub","forward_dir","draw_plane","PlaneGeometry","Vector4","basic_color_vert","basic_color_frag","transparent","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","SphereGeometry","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","event_manager","queue","zoom_changed_evt","store_clickd_evt","point_selected_evt","config_changed","path_substep_completed","path_completed","go_to_store_requested_evt","resource_loaded_evt","service_clicked_evt","unit_pos_updated_evt","floor_changed_evt","on_enter_floor_navigation","on_exit_floor_navigation","on_enter_floor_selection","on_exit_floor_selection","on_enter_outside_navigation","on_exit_outside_navigation","step_selected_evt","fire","event","payload","on","callback","fire_zoom_changed","zoom","fire_store_selected","store_id","fire_point_selected","hit_data","fire_config_changed","fire_path_substep_completed","step_number","fire_path_completed","fire_step_selected","step_index","fire_go_to_store_requested","fire_resource_loaded","resource","fire_service_clicked","service","fire_unit_position_updated","unit_data","fire_floor_switched","floor_id","fire_on_enter_floor_navigation","fire_on_exit_floor_navigation","fire_on_enter_floor_selection","fire_on_exit_floor_selection","fire_on_enter_outside_navigation","fire_on_exit_outside_navigation","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","src","dst","src_texture","isWebGLRenderTarget","texture","src_width","src_height","getSize","__render","material_pass","mat","blit_with_material","blit_clear_with_material","dst_RT","current_rt","getRenderTarget","setRenderTarget","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","clear_depth_normal_mat","depth_normal_material","__resize_RT_if_necessary","setSize","render_target","core_attributes","context_attributes","threejs_attributes","_renderer","blitter","no_render","current_render_mode","generateDepthNormalTexture","depth_and_normals_renderer","is_webgl2","canvas_context","force_webgl2","xr_enabled","alpha","antialias","desynchronized","failIfMajorPerformanceCaveat","powerPreference","premultipliedAlpha","preserveDrawingBuffer","stencil","logarithmicDepthBuffer","WebGLRenderer","xr","enabled","autoClear","setPixelRatio","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","dom_element","depth_normals_RT","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","render_scene","overrideMaterial","readback_RT","buffer","readRenderTargetPixels","clear_stencil","setClearColor","on_resize","entries","entry","contentRect","setViewport","src_RT","take_screenshot","blob_callback","old_width","old_height","new_width","new_height","tile_width","tile_height","divisions_x","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","blob","link","download","href","URL","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","colorSpace","LinearSRGBColorSpace","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","resources","EventManager","get_resource","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","index","get_mesh","v3","v4","Uint8Array","DataTexture","RGBFormat","dst_texture","one_pixel_text","geometry_batcher","batches","batch","buffer_geometries","attr_accessor_uvs","texture_width","ceilPowerOfTwo","__init_uv_array","uv_index","vertex_count","count","buffer_attribute","BufferAttribute","uvs","ui","input","ui_elements","_tmp_normalized_pos","ss_scene","matrixWorldAutoUpdate","ws_scene","ss_camera","delete_element","elem","add_screen_space_element","set_screen_space_coordinate_system","add_world_space_element","set_world_space_coordinate_system","NDC","update_state","Graphics","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","h_fov","atan","tan","up_plane_normal","get_up_plane_normal","down_plane_normal","get_down_plane_normal","left_plane_normal","get_left_plane_normal","right_plane_normal","get_right_plane_normal","camera_forward_dir","applyQuaternion","sphere_center","pull_back_distance","get_distance_to_fit_rect","far_pos","up_plane","Plane","setFromNormalAndCoplanarPoint","down_plane","left_plane","right_plane","apply_center_correction_to_pos","closest_distance","inverse_dir","Line3","up_line_intersection","down_line_intersection","left_line_intersection","right_line_intersection","intersectLine","new_up_distance","new_down_distance","new_left_distance","new_right_distance","vertical_min","horizontal_min","forward_correction","target_pos","vertical_offset","get_vertical_correction","horizontal_offset","get_horizontal_correction","closest_distance_to_up_plane","closest_distance_to_down_plane","up_dir","down_line","up_line","down_dist","up_dist","correction","closest_distance_to_right_plane","closest_distance_to_left_plane","right_dir","left_line","right_line","left_dist","right_dist","Quaternion","setFromAxisAngle","distV","distH","OrthographicFrustumPointFitter","inverse_camera_quat","inverse","inverted_points","getCenter","distance_to_center","camera_utilities","tmp_mat","Matrix4","ray","Ray","tmp_size","tmp_unproj","get_up_dir","tmp_vec","get_forward_dir","get_right_dir","unproject_mouse_position","get_plane_intersection","plane_position","plane_normal","isPerspectiveCamera","unproject","intersectPlane","fit_points_on_camera","zoom_scale","world_space_center","camera_forward","projected_points_center","up","right","cross","inverse_mat","getInverse","applyMatrix4","projected_center","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","ResourceContainer","UI","Debug","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","addEventListener","on_key_down","on_key_up","keyCode","ctrlKey","code","press_key","release_key","pressed","released","key_name","key","fired","down","release_keys","is_key_pressed","is_key_down","is_key_released","register_key","unregister_key","removeEventListener","TOrthographicCamera","NormalMaterial","DebugNormalsRender","DisplayNormalTextureMaterial","depth_normals_vert","_InverseProjMatrix","SSAOComposeMaterial","_AO","SSAOMaterial","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","use_ssaa","ssao_mat","ssao_compose_mat","debug_normals","ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","GaussianBlurMaterial","kernel_radius","KERNEL_RADIUS","SIGMA","texSize","direction","set_size","set_direction","LuminosityHighPassMaterial","luminosityThreshold","smoothWidth","defaultColor","defaultOpacity","GaussianBlurrer","current_width","current_height","separableBlurMaterials","renderTargetsHorizontal","renderTargetsVertical","kernelSizeArray","rt_pars","LinearFilter","renderTargetBright","generateMipmaps","init_materials","init_RT","luminosity_high_pass_mat","use_luminosity_high_pass","resize_RT","inputRenderTarget","get_blurred_texture","get_blurred_RT","dispose_RT","hor","ver","texture_height","dispose_materials","UnrealBloomRender","bloom_compose_mat","blur_RT","add_mat","val","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","view_component_contorller_manager","component_controllers","enabled_component_controllers","Set","__set_component_controllers_opacities","component_controller","register_component_controller","enable_component_controller","disable_component_controller","delete","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentControllerManager","setAnimationLoop","view_component_manager","components","enabled_components","__set_components_opacities","component","register_component","enable_component","disable_component","ViewComponent","ViewComponentManager","ViewComponentController","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","array","items_left_count","remove_elem","get_closest_point","closest_point","object_values_to_array","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","convert_to_non_indexed_geometry","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","HTMLUtilities","load_images","images","dataset","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","ImageUtilities","get_image_data","getImageData","get_pixel","imagedata","mesh_sampler","sample","sample_count","face_areas","min_area","normals","tangents","faces","index_0","index_1","index_2","v1","v2","face","c","n2","n3","normal","tangent","uv_a","uv_b","uv_c","area","get_face_area","normalized_faces_array","get_uniform_face_distribution","selected_faces","select_random_faces","sample_data_from_faces","sampled_points","sampled_normals","sampled_tangents","sampled_uvs","w1","w2","sample_point_in_face","amount","selected_face","minimum_area","extended_triangle_indices","repetitions_needed","j","vec1","vec2","w3","model_utilities","result_callback","fromGeometry","get_geometries","geometries","assign_material","clone_animated_gltf","gltf","animations","skinnedMeshes","isSkinnedMesh","cloneBones","cloneSkinnedMeshes","isBone","skeleton","cloneSkinnedMesh","orderedCloneBones","bones","cloneBone","Skeleton","boneInverses","matrixWorld","set_shadow_config","cast","receive","castShadow","receiveShadow","__find_object","get_object","get_object_by_type","object_type","ObjectUtilities","is_object","item","Array","isArray","merge_deep","sources","xml_to_json","nodeType","attributes","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old","StringUtilities","hexValues","hex","capitalize","words","substr","capitalize_first_letter","charAt","snake_to_camelcase","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Grid","derivatives","plane_geometry","rotation","_Thickness","_Length","_ElapsedTime","setup","next_position","previous_position","orientation","coverage","accumulated_length","next_point","__get_next_position","previous_point","__get_previous_position","vertexList","nextPositionList","previousPositionList","orientationList","coverageList","setIndex","_length","thickness","total_length","parent","copy_color","WorldImage","pivot","_ScreenAligned","_Scale","_Opacity","DoubleSide","current_scale","computeBoundingBox","tmp_bb_size","boundingBox","update_texture","img","screen_aligned","boolean","Text2D","is_static","simple_text_drawer","draw_settings","LinearMipMapLinearFilter","UIElementMaterial","intensity","_PixelOffset","_NDC","_PivotPoint","_DepthOffset","ScreenSpacePosition","get_pos_NDC","WorldSpacePosition","tmp_vec3","tmp_vec2","UIElementState","ui_element","normalized_mouse_position","OnIdle","is_mouse_over","_on_enter_state","OnMouseEnter","on_mouse_enter","_on_hover_state","_on_exit_state","OnMouseExit","on_mouse_exit","_on_idle_state","OnMouseHover","__trigger_on_hover","on_mouse_hover","UIElement","is_clickable","position_strategy","_position","on_hover","mouse_pos_tmp","cached_NDC_position","screen_pos_tmp","texture_size","matrixAutoUpdate","pixel_offset","set_render_order","pivot_point","set_pixel_offset","use_depth","depth_offset","clear_state","visible","get_size","normalized_mouse_pos","to_screen_position","rect","Box2","containsPoint","projected_pos","get_screen_space_position","set_screen_space_position","screen_pos","UpdatableMaterialMesh","self","onBeforeRender","TextGlyph","plane_bounds","atlas_bounds","SDFText","glyph_layout","glyphs","glyph_is_dirty","matrix_is_dirty","color_is_dirty","matrix","__opacity","__text","__generate_glyphs","update_matrix","compose","clear_glyph_dirty","clear_color_dirty","set_rotation","tilt","new_orientation","new_tilt","multiply","set_color","set_pivot","update_glyphs","op","cursor","unicode","charCodeAt","glyph","planeBounds","text_glyph","atlasBounds","advance","box2","first_glyph","union","box2_size","SDFTextMaterial","_Texture","_Boldness","_AtlasSize","set_atlas_size","set_boldness","SDFTextBatch","font_layout","atlas_texture","instanced_geometry","InstancedBufferGeometry","instanceCount","Float32BufferAttribute","transformsCol0","InstancedBufferAttribute","max_allocations","transformsCol1","transformsCol2","transformsCol3","glyph_bounds","usage","DynamicDrawUsage","text_elements","atlas","add_text","text_str","remove_text","text_elem","force_update","glyph_bounds_atr","plane_bounds_atr","color_atr","matrix_needs_update","glyph_needs_update","color_needs_update","glyph_count","glyph_i","buffer_i","setXYZW","VectorInterpolator","tmp","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","original_url","load_with_old_method","load_with_new_method","Texture","Image","onload","SRGBColorSpace","NoColorSpace","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","AudioClip","loop","volume","positional","audio","audio_listener","TPositionalAudio","TAudio","setBuffer","setLoop","gain","setVolume","pause","is_playing","isPlaying","AudioLoader","instantiate_audio","AudioContext","createBuffer","arrayBuffer","array_buffer","decodeAudioData","audio_buffer","BasisLoader","loader","basis","xhr","msg","CubemapLoader","extension","CubeTextureLoader","setPath","urls","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","GLTFDRACOLoader","GLTFLoader","setDRACOLoader","TGLTFLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","url_suffix","setDataType","UnsignedByteType","hdr","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","RGBETextureLoader","RGBELoader","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"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"}
1
+ {"version":3,"file":"index.module.js","sources":["../src/BaseApplication.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/BaseShaderMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/render_mode/BaseRender.js","../src/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.js","../src/view_components/ViewManager.js","../src/view_components/ViewState.js","../src/view_components/ApplicationView.js","../src/action_sequencer/ActionEvent.js","../src/utilities/OMath.js","../src/action_sequencer/ActionSequencer.js","../src/utilities/EasingFunctions.js","../src/action_sequencer/ActionInterpolator.js","../src/action_sequencer/NumberInterpolator.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewControllerManager.js","../src/view_components/VCManager.js","../src/view_components/WorkerToMain.js","../src/view_components/ApplicationViewController.js","../src/CameraManager.js","../src/canvas_drawer/CanvasDrawer.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/Capabilities.js","../src/components/AxisHelper.js","../src/SceneManager.js","../src/primitives/Cube.js","../src/primitives/Sphere.js","../src/primitives/Arrow.js","../src/OScreen.js","../src/materials/ScreenSpaceTextureMaterial.js","../src/PerspectiveCamera.js","../src/Debug.js","../src/EventManager.js","../src/render_utilities/Blitter.js","../src/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/Graphics.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/ResourceContainer.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/KeyboardInput.js","../src/OrthographicCamera.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/SSAOMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/render_mode/VRRender.js","../src/view_components/ViewComponentControllerManager.js","../src/RenderLoop.js","../src/view_components/ViewComponentManager.js","../src/view_components/ViewComponent.js","../src/view_components/ViewComponentController.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/HTMLUtilities.js","../src/utilities/ImageUtilities.js","../src/utilities/MeshSampler.js","../src/utilities/ModelUtilities.js","../src/utilities/ObjectUtilities.js","../src/utilities/StringUtilities.js","../src/utilities/TimeUtilities.js","../src/components/Grid.js","../src/components/Line.js","../src/components/WorldImage.js","../src/components/Text2D.js","../src/materials/UIElementMaterial.js","../src/ui/ui_element_position/ScreenSpacePosition.js","../src/ui/ui_element_position/WorldSpacePosition.js","../src/ui/ui_element_state/UIElementState.js","../src/ui/ui_element_state/OnIdle.js","../src/ui/ui_element_state/OnMouseEnter.js","../src/ui/ui_element_state/OnMouseExit.js","../src/ui/ui_element_state/OnMouseHover.js","../src/components/UIElement.js","../src/components/UpdatableMaterialMesh.js","../src/components/sdf_text/TextGlyph.js","../src/components/sdf_text/SDFText.js","../src/materials/SDFTextMaterial.js","../src/components/sdf_text/SDFTextBatch.js","../src/action_sequencer/VectorInterpolator.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.js","../src/materials/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/gpu_particles/ParticleAttribute.js","../src/gpu_particles/GPUParticleSystem.js","../src/materials/gpu_particles/ParticleStorageMaterial.js","../src/gpu_particles/ParticlePositionAttribute.js","../src/data_textures/CustomDataTexture.js","../src/data_textures/RGBDataTexture.js","../src/data_textures/RGBADataTexture.js","../src/data_textures/RGBFloatDataTexture.js","../src/data_textures/RGBAFloatDataTexture.js","../src/static_batcher/BatchedMesh.js","../src/static_batcher/MeshBatcher.js","../src/resource_loader/AsyncTextureLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/RGBETextureLoader.js","../src/resource_loader/TextLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n\n dispose()\n {}\n}\n\nexport { BaseApplication };\n","import vert from '../shaders/copy/copy.vert';\nimport frag from '../shaders/copy/copy.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Vector2 } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass BlitMaterial extends ShaderMaterial\n{\n constructor(frag_shader, vert_shader, defines)\n {\n super({\n uniforms: {\n _MainTex: { value: null },\n _Resolution: { value: new Vector2(0, 0) },\n _TargetResolution: { value: new Vector2(0, 0) }\n },\n defines: defines || {},\n vertexShader: vert_shader || vert,\n fragmentShader: frag_shader || frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { BlitMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/add/add.frag';\n\nclass AddMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag);\n\n this.uniforms._SecondTex = { value: undefined };\n }\n\n set_add_texture(tex)\n {\n this.uniforms._SecondTex.value = tex;\n }\n}\n\nexport { AddMaterial };\n","import basic_vert from '../shaders/basic_color/basic_color.vert';\nimport basic_frag from '../shaders/basic_color/basic_color.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass BaseShaderMaterial extends ShaderMaterial\n{\n constructor(vert, frag, uniforms)\n {\n super({\n vertexShader: vert || basic_vert,\n fragmentShader: frag || basic_frag,\n uniforms: uniforms || {\n _Color: { value: new Color('#FF0000') }\n }\n });\n }\n}\n\nexport { BaseShaderMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/unreal_bloom_compose.frag';\n\nimport { Color } from 'three';\nclass UnrealBloomComposeMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag, undefined, {\n NUM_MIPS: nMips\n });\n this.uniforms._MainTex = { value: undefined };\n this.uniforms._BlurredTex = { value: undefined };\n this.uniforms._BloomStrength = { value: 1 };\n\n this.uniforms.blurTexture1 = { value: null };\n this.uniforms.blurTexture2 = { value: null };\n this.uniforms.blurTexture3 = { value: null };\n this.uniforms.blurTexture4 = { value: null };\n this.uniforms.blurTexture5 = { value: null };\n\n this.uniforms.bloomStrength = { value: 1.0 };\n this.uniforms.bloomFactors = { value: [1.0, 0.8, 0.6, 0.4, 0.2] };\n this.uniforms.bloomRadius = { value: 0.0 };\n\n const bloomTintColors = [\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF')\n ];\n\n this.uniforms.bloomTintColors = { value: bloomTintColors };\n }\n\n set_RT_0(rt)\n {\n this.uniforms.blurTexture1.value = rt;\n }\n\n set_RT_1(rt)\n {\n this.uniforms.blurTexture2.value = rt;\n }\n\n set_RT_2(rt)\n {\n this.uniforms.blurTexture3.value = rt;\n }\n\n set_RT_3(rt)\n {\n this.uniforms.blurTexture4.value = rt;\n }\n\n set_RT_4(rt)\n {\n this.uniforms.blurTexture5.value = rt;\n }\n\n set_bloom_strength(value)\n {\n this.uniforms.bloomStrength.value = value;\n }\n\n set_bloom_radius(value)\n {\n this.uniforms.bloomRadius.value = value;\n }\n\n set_tint_color_0(col_string)\n {\n this.uniforms.bloomTintColors.value[0].set(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.uniforms.bloomTintColors.value[1].set(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.uniforms.bloomTintColors.value[2].set(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.uniforms.bloomTintColors.value[3].set(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.uniforms.bloomTintColors.value[4].set(col_string);\n }\n}\n\nexport { UnrealBloomComposeMaterial };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","\nclass Browser\n{\n init(opr, chrome)\n {\n this.browser_name = '';\n this.agent = navigator.userAgent.toLowerCase();\n\n // vr specific\n this.vr_browser_keywords = ['oculusbrowser', 'oculus', 'vive', 'rift', 'windowsmr', 'cardboard', 'daydream', 'wolvic'];\n this.vr_browser_name = this.vr_browser_keywords.find(keyword => this.agent.includes(keyword));\n // Check for WebXR support (indicating VR capabilities)\n this.has_web_xr_support = 'xr' in navigator;\n\n switch (true)\n {\n case this.vr_browser_name !== undefined && this.has_web_xr_support:\n this.browser_name = this.vr_browser_name;\n break;\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n case this.agent.indexOf('opr') > -1 && !!opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get is_vr()\n {\n return this.vr_browser_keywords.includes(this.browser_name);\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = '';\n let version = 0;\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","class Validation\n{\n constructor()\n {}\n\n static is_int(n)\n {\n return Number(n) === n && n % 1 === 0;\n }\n\n static is_float(n)\n {\n return Number(n) === n && n % 1 !== 0;\n }\n\n static is_number(n)\n {\n return this.is_int(n) || this.is_float(n);\n }\n\n static is_json(str)\n {\n try\n {\n JSON.parse(str);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n}\n\nexport { Validation };\n","import { Browser } from '../Browser';\r\nimport { Validation } from '../utilities/Validation';\r\n\r\nclass AbstractLoader\r\n{\r\n constructor(resource_id, url, size = 1)\r\n {\r\n this.resource_id = resource_id;\r\n this.url = url;\r\n this.loaded_bytes = 0;\r\n this.total_bytes = size;\r\n\r\n this.has_finished = false;\r\n this.has_error = false;\r\n this.error_message = 'none';\r\n }\r\n\r\n __update_downloaded_bytes(loaded, total)\r\n {\r\n loaded = Validation.is_number(loaded) ? loaded : 1;\r\n total = Validation.is_number(total) ? total : 1;\r\n\r\n this.loaded_bytes = loaded;\r\n\r\n if (total > 0)\r\n {\r\n this.total_bytes = total;\r\n }\r\n\r\n if (this.loaded_bytes > this.total_bytes)\r\n {\r\n console.warn('Total bytes is smaller than loaded ones. Please set total bytes by hand to:', this.url);\r\n }\r\n }\r\n\r\n __loading_ended()\r\n {\r\n this.has_finished = true;\r\n }\r\n\r\n __set_error(message)\r\n {\r\n this.has_error = true;\r\n this.error_message = message;\r\n }\r\n\r\n print_error()\r\n {\r\n console.error('Error while loading ' + this.resource_id + '\\n\\t path: ' + this.url + '\\n\\t\\t' + this.error_message);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const cache = Browser.is_safari ? 'no-cache' : 'default';\r\n\r\n fetch(this.url, {\r\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: cache, // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: 'same-origin', // include, *same-origin, omit\r\n redirect: 'follow' // manual, *follow, error\r\n })\r\n .then(this.on_progress.bind(this, resource_container))\r\n .catch(this.__on_error.bind(this));\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n async on_progress(resource_container, response)\r\n {\r\n const response_clone = response.clone();\r\n const reader = response.body.getReader();\r\n\r\n // Step 2: get total length\r\n const contentLength = +response.headers.get('Content-Length');\r\n\r\n // Step 3: read the data\r\n let receivedLength = 0; // received that many bytes at the moment\r\n\r\n while (true)\r\n {\r\n const { done, value } = await reader.read();\r\n\r\n if (done)\r\n {\r\n break;\r\n }\r\n\r\n receivedLength += value.length;\r\n\r\n this.__update_downloaded_bytes(receivedLength, contentLength);\r\n // console.log(`Received ${receivedLength} of ${contentLength}`);\r\n }\r\n\r\n this.on_preloaded_finished(resource_container, response_clone);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n }\r\n\r\n __on_error(data)\r\n {\r\n console.error(data);\r\n }\r\n}\r\n\r\nexport { AbstractLoader };\r\n","\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n this.main_to_worker = undefined;\n\n this.browser_title_suffix = '';\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n this.main_to_worker.post('go_to_view_controller', { view_controller_name: view_name, skip });\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const transition_view = this.get('transition');\n\n transition_view.set_next_view_name(scene_name);\n\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_by_url(url)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].url === url)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get_by_url] no view found for: ', url);\n return undefined;\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n set_main_to_worker(main_to_worker)\n {\n this.main_to_worker = main_to_worker;\n }\n\n __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n show()\n {\n }\n\n hide()\n {\n }\n\n before_enter()\n {\n }\n\n on_enter()\n {\n }\n\n before_update()\n {\n }\n\n update()\n {\n }\n\n fixed_update()\n {\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n before_exit()\n {\n }\n\n on_exit()\n {\n }\n}\n\nexport { ViewState };\n","import { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n ViewManager.register_view(this);\n }\n\n show()\n {\n this.container.classList.add('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n on_enter()\n {\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n before_exit()\n {\n this.container.classList.add('before_exit');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('hidden');\n }\n\n hide()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n set_opacity(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ApplicationView };\n","\nclass ActionEvent\n{\n constructor(name, method, args)\n {\n this.name = name;\n this.method = method;\n this.args = args;\n }\n\n trigger()\n {\n ViewApi.application[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","class OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = points[0].clone();\n projected_point.set(0, 0, 0);\n\n const points_on_plane = [];\n for (let i = 0; i < points.length; i++)\n {\n plane.projectPoint(points[i], projected_point);\n points_on_plane.push(projected_point.clone());\n }\n\n return points_on_plane;\n }\n\n static matrix4_lerp(from, to, target, t)\n {\n for (let i = 0; i < 16; i++)\n {\n target.elements[i] = this.lerp(from.elements[i], to.elements[i], t);\n }\n }\n\n static equals(x1, x2)\n {\n return Math.abs(x1 - x2) < 0.000001;\n }\n\n static lerp(x, y, t)\n {\n return (1 - t) * x + t * y;\n }\n\n static clamp(value, min, max)\n {\n return Math.max(min, Math.min(max, value));\n }\n\n static euclideanModulo(n, m)\n {\n return ((n % m) + m) % m;\n }\n\n static pingpong(x, length = 1)\n {\n return length - Math.abs(OMath.euclideanModulo(x, length * 2) - length);\n }\n\n static degToRad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static radToDeg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static deg_to_rad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static rad_to_deg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static perspective_divide(v)\n {\n v.x /= v.w;\n v.y /= v.w;\n v.z /= v.w;\n return v;\n }\n\n static points_average(points)\n {\n const center = points[0].clone();\n for (let i = 1; i < points.length; i++)\n {\n center.add(points[i]);\n }\n center.multiplyScalar(1 / points.length);\n return center;\n }\n\n static get_random_color()\n {\n const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];\n\n let col = '#';\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n return col;\n }\n\n static saturate(x)\n {\n return OMath.clamp(x, 0, 1);\n }\n}\n\nexport { OMath };\n","\nimport { OMath } from '../utilities/OMath';\n\nclass ActionSequencer\n{\n constructor(context = {}, transitions_velocity)\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed(transitions_velocity);\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed(transitions_velocity)\n {\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context, transitions_velocity)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context, transitions_velocity);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","import { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n\n this.transitions_velocity = 1;\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context, this.transitions_velocity);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context, this.transitions_velocity);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transitions_velocity = transitions_velocity;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","import { Time } from '../../Time';\nimport { ViewState } from '../ViewState';\n\nclass ViewStateTransitionHandler\n{\n constructor(transition_table)\n {\n this.last_state = new ViewState();\n this.current_state = new ViewState();\n\n this.default_state_data = {};\n this.current_state_data = {};\n\n this.transition_table = transition_table;\n\n this.transitioning = false;\n }\n\n go_to_state(state, skip = false)\n {\n if (this.transitioning)\n {\n this.__exit_last_state();\n }\n\n this.last_state = this.current_state;\n this.current_state = state;\n\n this.last_state.before_exit();\n this.current_state.show();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.current_state.before_enter();\n\n this.action_sequencer.play();\n\n this.transitioning = true;\n\n if (skip)\n {\n this.action_sequencer.skip();\n this.update();\n }\n }\n\n update()\n {\n if (this.transitioning)\n {\n this.__update_transitions();\n\n if (this.action_sequencer.is_finished())\n {\n this.transitioning = false;\n\n this.__update_transitions();\n\n this.__exit_last_state();\n\n this.current_state.on_enter();\n }\n }\n else\n {\n this.current_state.update();\n }\n }\n\n before_update()\n {\n this.current_state.before_update();\n }\n\n fixed_update()\n {\n this.current_state.fixed_update();\n }\n\n set_state(state)\n {\n this.current_state = state;\n }\n\n set_default_state_data(default_state_data)\n {\n Object.assign(this.default_state_data, default_state_data);\n Object.assign(this.current_state_data, default_state_data);\n }\n\n __update_transitions()\n {\n this.action_sequencer.update(Time.delta_time);\n this.last_state.update_exit_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n this.current_state.update_enter_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n }\n\n __exit_last_state()\n {\n if (this.last_state.name !== this.current_state.name)\n {\n this.last_state.hide();\n }\n\n this.last_state.on_exit();\n }\n}\n\nexport { ViewStateTransitionHandler };\n","import { TransitionTable } from './transition/TransitionTable';\nimport { ViewStateTransitionHandler } from './transition/ViewStateTransitionHandler';\n\nclass TransitionManager\n{\n constructor()\n {\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n }\n\n get action_sequencer()\n {\n return this.transition_handler.action_sequencer;\n }\n\n get current_state_data()\n {\n return this.transition_handler.current_state_data;\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n add_transitions(transitions)\n {\n this.transition_table.add_transitions(transitions);\n }\n\n set_transitions(transitions)\n {\n this.transition_table.set_transitions(transitions);\n }\n\n set_default_state_data(default_state_data)\n {\n this.transition_table.set_default_state_data(default_state_data);\n this.transition_handler.set_default_state_data(default_state_data);\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transition_table.set_transitions_velocity(transitions_velocity);\n }\n}\n\nconst transition_manager = new TransitionManager();\nexport { transition_manager as TransitionManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewControllerManager\n{\n constructor()\n {\n this.view_controllers = [];\n }\n\n go_to_view_controller(view_controller_name, skip = false)\n {\n const v = this.get(view_controller_name);\n TransitionManager.transition_handler.go_to_state(v, skip);\n }\n\n update()\n {\n this.__set_view_controllers_opacities();\n }\n\n register_view_controller(view_controller)\n {\n this.view_controllers.push(view_controller);\n }\n\n set_view_controller(view_controller_name)\n {\n const view_controller = this.get(view_controller_name);\n\n TransitionManager.transition_handler.set_state(view_controller);\n }\n\n get_current_view_controller()\n {\n return TransitionManager.transition_handler.current_state;\n }\n\n get(view_controller_name)\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n if (this.view_controllers[i].name === view_controller_name)\n {\n return this.view_controllers[i];\n }\n }\n console.error('[ViewControllerManager.get] no view controller found for: ', view_controller_name);\n return undefined;\n }\n\n // get_by_url(url)\n // {\n // for (let i = 0; i < this.view_controllers.length; i++)\n // {\n // if (this.view_controllers[i].url === url)\n // {\n // return this.view_controllers[i];\n // }\n // }\n // console.error('[ViewControllerManager.get_by_url] no view controller found for: ', url);\n // return undefined;\n // }\n\n __set_view_controllers_opacities()\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n this.view_controllers[i].set_opacity(TransitionManager.transition_handler.current_state_data);\n }\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nexport { ViewControllerManager };\n","import { ViewControllerManager } from './ViewControllerManager';\n\n// Formerly ViewControllerManager\nclass VCManager extends ViewControllerManager\n{\n}\n\nconst v_c_manager = new VCManager();\nexport { v_c_manager as VCManager };\n","\nclass WorkerToMain\n{\n constructor()\n {\n // TODO: Use SharedArrayBuffer?\n this.methods = [];\n this.args = [];\n }\n\n push(method, args = [])\n {\n this.methods.push(method);\n this.args.push(args);\n }\n\n clear()\n {\n this.methods = [];\n this.args = [];\n }\n}\n\nconst worker_to_main = new WorkerToMain();\nexport { worker_to_main as WorkerToMain };\n","import { TransitionManager } from './TransitionManager';\nimport { VCManager } from './VCManager';\nimport { ViewState } from './ViewState';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ApplicationViewController extends ViewState\n{\n constructor({ name, url, transition_data })\n {\n super(name);\n\n this.url = url;\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n this.current_opacity = 0;\n\n VCManager.register_view_controller(this);\n TransitionManager.add_transitions(transitions);\n }\n\n show()\n {\n WorkerToMain.push(`${this.name}_view.show`);\n }\n\n before_enter()\n {\n WorkerToMain.push(`${this.name}_view.before_enter`);\n }\n\n on_enter()\n {\n WorkerToMain.push(`${this.name}_view.on_enter`);\n }\n\n before_exit()\n {\n WorkerToMain.push(`${this.name}_view.before_exit`);\n }\n\n on_exit()\n {\n WorkerToMain.push(`${this.name}_view.on_exit`);\n }\n\n hide()\n {\n WorkerToMain.push(`${this.name}_view.hide`);\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_view.update`);\n }\n\n fixed_update()\n {\n // TODO: Evaluate if a fixed update is necessary on the main thread\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_enter_transition`, [global_view_data, transition_progress]);\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_exit_transition`, [global_view_data, transition_progress]);\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n WorkerToMain.push(`${this.name}_view.set_opacity`, [opacity]);\n }\n }\n}\n\nexport { ApplicationViewController };\n","class CameraManager\n{\n init()\n {\n this._current = undefined;\n // VR Spectator\n this._spectator = undefined;\n }\n\n set current(camera)\n {\n this._current = camera;\n }\n\n get current()\n {\n return this._current;\n }\n\n set spectator(camera)\n {\n this._spectator = camera;\n }\n\n get spectator()\n {\n return this._spectator;\n }\n}\n\nconst camera_manager = new CameraManager();\nexport { camera_manager as CameraManager };\n","import { CanvasTexture } from 'three';\nimport { Vector2 } from 'three';\nimport { UVMapping } from 'three';\nimport { ClampToEdgeWrapping } from 'three';\nimport { NearestFilter } from 'three';\n\nclass CanvasDrawer\n{\n constructor(uses_dynamic_font)\n {\n this.uses_dynamic_font = uses_dynamic_font;\n this.__textHeight = null;\n\n this.canvas = document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n }\n\n getFontHeight(fontStyle = 'Arial')\n {\n if (this.__textHeight == null || this.uses_dynamic_font)\n {\n const body = document.getElementsByTagName('body')[0];\n const dummy = document.createElement('div');\n const dummyText = document.createTextNode('MÉqgOLAKTAL');\n dummy.appendChild(dummyText);\n dummy.setAttribute('style', `font:${fontStyle};position:absolute;top:0;left:0`);\n body.appendChild(dummy);\n this.__textHeight = dummy.offsetHeight;\n body.removeChild(dummy);\n }\n return this.__textHeight;\n }\n\n get_text_size(text, font = '24px Arial')\n {\n const size = new Vector2();\n this.ctx.font = font;\n size.x = Math.ceil(this.ctx.measureText(text).width);\n size.y = Math.ceil(this.getFontHeight(font));\n return size;\n }\n\n draw_canvas(text, ctxOptions = {})\n {\n ctxOptions.font = ctxOptions.font || '24px Arial';\n ctxOptions.font_color = ctxOptions.font_color || '#000000';\n\n this.__draw(text, ctxOptions, this.canvas, this.ctx);\n return this.canvas;\n }\n\n draw_on_texture(text, ctxOptions)\n {\n const canvas = this.draw_canvas(text, ctxOptions);\n const canvas_texture = new CanvasTexture(canvas, UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n NearestFilter,\n NearestFilter);\n canvas_texture.generateMipMaps = false;\n canvas_texture.needsUpdate = true;\n\n return canvas_texture;\n }\n\n __draw(text, ctxOptions)\n {}\n\n roundRect(ctx, x, y, width, height, radius, fill, stroke)\n {\n if (typeof stroke === 'undefined')\n {\n stroke = true;\n }\n if (typeof radius === 'undefined')\n {\n radius = 5;\n }\n if (typeof radius === 'number')\n {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n else\n {\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (const side in defaultRadius)\n {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n if (fill)\n {\n ctx.fill();\n }\n if (stroke)\n {\n ctx.stroke();\n }\n }\n}\n\nexport { CanvasDrawer };\n","\nimport { CanvasDrawer } from './CanvasDrawer';\n\nimport { Vector2 } from 'three';\n\nclass SimpleTextDrawer extends CanvasDrawer\n{\n constructor()\n {\n super();\n this.text_margin = new Vector2(2, 0);\n }\n\n __draw(text, ctxOptions, canvas, ctx)\n {\n ctx.font = ctxOptions.font;\n\n const text_size = this.get_text_size(text, ctxOptions.font);\n // canvas.width = Math.ceilPowerOfTwo(text_size.x+this.text_margin.x*2);\n // canvas.height = Math.ceilPowerOfTwo(text_size.y+ this.text_margin.y*2);\n canvas.width = Math.ceil(text_size.x + this.text_margin.x * 2);\n canvas.height = Math.ceil(text_size.y + this.text_margin.y * 2);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // turn this on for debugging\n ctx.globalAlpha = 0.0;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalAlpha = 1;\n\n ctx.globalAlpha = 1;\n\n ctx.font = ctxOptions.font;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.textBaseline = 'middle';\n\n ctx.textAlign = ctxOptions.textAlign || 'center';\n if (ctx.textAlign === 'center')\n {\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n }\n else\n {\n ctx.fillText(text, 0, canvas.height / 2);\n }\n }\n}\n\nexport { SimpleTextDrawer };\n","class Capabilities\n{\n init()\n {\n this.max_anisotropy = 0;\n this.vertex_texture_sampler_available = false;\n this.fp_textures_available = false;\n }\n}\n\nconst capabilities = new Capabilities();\nexport { capabilities as Capabilities };\n","\nimport { Object3D } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { AlwaysDepth } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Vector3 } from 'three';\nimport { Line } from 'three';\n\nclass AxisHelper extends Object3D\n{\n constructor(scale = 1.0)\n {\n super();\n\n const blue_points = [];\n blue_points.push(new Vector3(0, 0, 0));\n blue_points.push(new Vector3(0, 0, 1000));\n\n const blue_axis_mat = new LineBasicMaterial({ color: 0x4444ff, depthFunc: AlwaysDepth });\n const blue_axis_geo = new BufferGeometry().setFromPoints(blue_points);\n const blue_axis_line = new Line(blue_axis_geo, blue_axis_mat);\n blue_axis_line.renderOrder = 50000;\n\n const green_points = [];\n green_points.push(new Vector3(0, 0, 0));\n green_points.push(new Vector3(0, 1000, 0));\n\n const green_axis_mat = new LineBasicMaterial({ color: 0x44ff44, depthFunc: AlwaysDepth });\n const green_axis_geo = new BufferGeometry().setFromPoints(green_points);\n const green_axis_line = new Line(green_axis_geo, green_axis_mat);\n green_axis_line.renderOrder = 50000;\n\n const red_points = [];\n red_points.push(new Vector3(0, 0, 0));\n red_points.push(new Vector3(1000, 0, 0));\n\n const red_axis_mat = new LineBasicMaterial({ color: 0xff4444, depthFunc: AlwaysDepth });\n const red_axis_geo = new BufferGeometry().setFromPoints(red_points);\n const red_axis_line = new Line(red_axis_geo, red_axis_mat);\n red_axis_line.renderOrder = 50000;\n\n this.renderOrder = 100000;\n\n this.add(blue_axis_line);\n this.add(green_axis_line);\n this.add(red_axis_line);\n\n this.scale.set(scale, scale, scale);\n }\n\n update()\n {\n }\n\n dispose()\n {\n }\n}\n\nexport { AxisHelper };\n","import { Scene } from 'three';\n\nclass SceneManager\n{\n init()\n {\n this._current = new Scene();\n this._current.name = 'default_scene';\n }\n\n add_scene(name)\n {\n\n }\n\n get current()\n {\n return this._current;\n }\n\n set current(scene)\n {\n this._current = scene;\n }\n\n dispose()\n {\n this.current.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.dispose();\n child.material.dispose();\n }\n });\n\n while (this.current.children.length > 0)\n {\n this.current.remove(this.current.children[0]);\n }\n }\n}\n\nconst scene_manager = new SceneManager();\nexport { scene_manager as SceneManager };\n","\nimport { Vector3, Mesh } from 'three';\nimport { BoxGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Cube extends Mesh\n{\n constructor(size, segments, color)\n {\n size = size || new Vector3(1, 1, 1);\n segments = segments || new Vector3(1, 1, 1);\n color = color || 0xff0000;\n const geometry = new BoxGeometry(size.x, size.y, size.z, segments.x, segments.y, segments.z);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Cube };\n","import { Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\n\nclass Sphere extends Mesh\n{\n constructor(radius, color)\n {\n color = color || '#FF0000';\n radius = radius || 1;\n const geometry = new SphereGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Sphere };\n","import { ConeGeometry, CylinderGeometry, Mesh, MeshBasicMaterial, Vector3 } from 'three';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nclass Arrow extends Mesh\n{\n constructor(color, length, dir)\n {\n color = color || '#FF0000';\n length = length || 1;\n\n const cone_height = 0.4;\n const cylinder_height = length - cone_height;\n const cylinder_geo = new CylinderGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeGeometry(0.1, cone_height, 32);\n cone_geometry.translate(0, cylinder_height + cone_height / 2, 0);\n\n const buffer_geometry = BufferGeometryUtils.mergeBufferGeometries([cylinder_geo, cone_geometry]);\n buffer_geometry.rotateX(3.14 / 2);\n\n const material = new MeshBasicMaterial({ color: color });\n super(buffer_geometry, material);\n\n if (dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n }\n\n this._dir = dir;\n }\n\n set dir(dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n this._dir = dir;\n }\n\n get dir()\n {\n return this._dir;\n }\n\n set length(value)\n {\n this.scale.z = value;\n }\n\n get length()\n {\n return this.scale.z;\n }\n}\n\nexport { Arrow };\n","import { Vector2 } from 'three';\n\nclass OScreen\n{\n init()\n {\n this.width = 1;\n this.height = 1;\n\n this.position = new Vector2();\n\n this.render_width = 1;\n this.render_height = 1;\n this.width_height = new Vector2(this.width, this.height);\n\n this.dpr = 1;\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n }\n\n update_position(x, y)\n {\n this.position.set(x, y);\n }\n\n update()\n {\n this.size_changed = false;\n }\n\n update_size(width, height)\n {\n this.width = width;\n this.height = height;\n\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n\n this.width_height.x = width;\n this.width_height.y = height;\n\n this.render_width = width * this.dpr;\n this.render_height = height * this.dpr;\n\n this.size_changed = true;\n }\n\n apply_pixel_density_v2(vector2)\n {\n vector2.multiplyScalar(1 / this.dpr);\n\n return vector2;\n }\n\n apply_pixel_density(value)\n {\n return value * (1 / this.dpr);\n }\n\n get_pixel_size()\n {\n return this.pixel_size;\n }\n\n get aspect_ratio()\n {\n return this.width / this.height;\n }\n\n get portrait()\n {\n return this.width < this.height;\n }\n}\n\nconst oscreen = new OScreen();\nexport { oscreen as OScreen };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\nimport { Vector2 } from 'three';\nclass ScreenSpaceTextureMaterial extends BaseShaderMaterial\n{\n constructor(x, y, w, h)\n {\n const vert = `\n uniform vec2 _ScreenSpacePosition;\n uniform vec2 _ScreenSize;\n uniform vec2 _TextureSize;\n varying vec2 vUv;\n void main()\n {\n vec2 pos = uv * vec2(_TextureSize.x / _ScreenSize.x, _TextureSize.y / _ScreenSize.y);\n pos += vec2(_ScreenSpacePosition.x / _ScreenSize.x, _ScreenSpacePosition.y / _ScreenSize.y);\n\n pos.x = pos.x * 2.0 - 1.0;\n pos.y = pos.y * 2.0 - 1.0;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n vUv = uv;\n }\n `;\n const frag = `\n uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n `;\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSpacePosition: { value: new Vector2() },\n _ScreenSize: { value: new Vector2() },\n _TextureSize: { value: new Vector2() }\n });\n }\n\n set_position(x, y)\n {\n this.uniforms._ScreenSpacePosition.value.set(x, y);\n }\n\n set_texture(tex, w, h)\n {\n this.uniforms._MainTex.value = tex;\n this.uniforms._TextureSize.value.set(tex.image.width, tex.image.height);\n\n if (w !== undefined)\n {\n this.uniforms._TextureSize.value.x = w;\n }\n if (h !== undefined)\n {\n this.uniforms._TextureSize.value.y = h;\n }\n }\n\n set_screen_size(w, h)\n {\n this.uniforms._ScreenSize.value.set(w, h);\n }\n}\n\nexport { ScreenSpaceTextureMaterial };\n","import { Color } from 'three';\nimport { PerspectiveCamera as TPerspectiveCamera } from 'three';\n\nclass PerspectiveCamera extends TPerspectiveCamera\n{\n constructor(fov, aspect, near, far)\n {\n super(fov, aspect, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { PerspectiveCamera };\n","import { AxisHelper } from './components/AxisHelper';\n\nimport { SceneManager } from './SceneManager';\nimport { Cube } from './primitives/Cube';\nimport { Sphere } from './primitives/Sphere';\nimport { Arrow } from './primitives/Arrow';\nimport { OScreen } from './OScreen';\nimport { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';\nimport { PerspectiveCamera } from './PerspectiveCamera';\n\nimport { Vector3 } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Line } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Vector4 } from 'three';\nimport { Mesh } from 'three';\nimport { Box3 } from 'three';\nimport { Box3Helper } from 'three';\nimport { Scene } from 'three';\nimport { CatmullRomCurve3 } from 'three';\nimport { SphereGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nimport basic_color_vert from './shaders/basic_color/basic_color.vert';\nimport basic_color_frag from './shaders/basic_color/basic_color.frag';\nimport { CameraManager } from './CameraManager';\n\nclass Debug\n{\n init()\n {\n this.Vector3_one = new Vector3(1, 1, 1);\n this.Vector3_zero = new Vector3(0, 0, 0);\n this.canvas_renderer = undefined;\n\n this.display_texture_meshes = [];\n\n this.ctx = undefined;\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);\n this.camera.clear_alpha = 0;\n }\n\n draw_arrow(origin, dir, color = 0xff0000)\n {\n const arrow = new Arrow(color, dir.length(), dir.clone().normalize());\n arrow.position.copy(origin);\n this.scene.add(arrow);\n return arrow;\n }\n\n draw_axis()\n {\n const axis = new AxisHelper();\n this.scene.add(axis);\n return axis;\n }\n\n set_debug_RT(RT)\n {\n this.rt_debug = RT;\n }\n\n draw_rectangle(position_2d, width, height, color)\n {\n width = width || 100;\n height = height || 100;\n this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.fillRect(position_2d.x - width / 2,\n (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);\n }\n\n clear()\n {\n if (this.ctx)\n {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n }\n }\n\n draw_line_2D(from, to, color)\n {\n this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.beginPath();\n this.ctx.moveTo(from.x, from.y);\n this.ctx.lineTo(to.x, to.y);\n this.ctx.closePath();\n this.ctx.stroke();\n }\n\n draw_line(points, color = 0xff0000)\n {\n const material = new LineBasicMaterial({\n color: color\n });\n\n const geometry = new BufferGeometry().setFromPoints(points);\n\n const line = new Line(geometry, material);\n line.frustumCulled = false;\n this.scene.add(line);\n return line;\n }\n\n draw_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const cube = new Cube(new Vector3(size, size, size), undefined, color);\n cube.position.copy(pos);\n this.scene.add(cube);\n return cube;\n }\n\n draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)\n {\n const size = from.distanceTo(to);\n const cube = new Cube(new Vector3(depth, height, size), undefined, color);\n\n const center = to.clone().sub(from).multiplyScalar(0.5);\n const forward_dir = center.clone().normalize();\n center.add(from);\n\n cube.position.copy(center);\n\n // let up = new Vector3(0, 1, 0);\n // let forward = forward_dir.clone();\n // let right = forward.clone().cross(up);\n\n // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));\n cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);\n\n this.scene.add(cube);\n return cube;\n }\n\n draw_plane(width, height, color)\n {\n const geometry = new PlaneGeometry(width, height);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(0, 1, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true,\n depthWrite: false\n });\n\n const plane = new Mesh(geometry, material);\n plane.renderOrder = -10000;\n this.scene.add(plane);\n return plane;\n }\n\n draw_empty_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n\n const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));\n const helper = new Box3Helper(box, color);\n helper.position.copy(pos || new Vector3());\n return helper;\n }\n\n draw_sphere(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const sphere = new Sphere(size, color);\n sphere.position.copy(pos);\n this.scene.add(sphere);\n return sphere;\n }\n\n draw_point_array(input_points, open = false, color = 0xff0000)\n {\n const catmull = new CatmullRomCurve3(input_points, open);\n catmull.updateArcLengths();\n const points = catmull.getSpacedPoints(200);\n const line_helper = this.draw_line(points, 0x00ff00);\n // line_helper.position.y = 1.5;\n return line_helper;\n }\n\n draw_sphere_helper(sphere, color)\n {\n color = color || 0xff0000;\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new MeshBasicMaterial({ color: color });\n const sphere_mesh = new Mesh(geometry, material);\n sphere_mesh.position.copy(sphere.center);\n SceneManager.current.add(sphere_mesh);\n return sphere_mesh;\n }\n\n draw_math_sphere(sphere)\n {\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(1, 0, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true\n });\n // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );\n const sphere1 = new Mesh(geometry, material);\n sphere1.position.copy(sphere.center);\n SceneManager.current.add(sphere1);\n }\n\n draw_bounding_box(bb)\n {\n const helper = new Box3Helper(bb, 0xffff00);\n SceneManager.current.add(helper);\n }\n\n draw_curve(curve, options)\n {\n const offset = new Vector3(0, 0, 0);\n if (options)\n {\n offset.y = options.offset || 0;\n }\n\n for (let i = 0; i < curve.length - 1; i++)\n {\n this.draw_line(curve[i].clone().add(offset), curve[i + 1].clone().add(offset));\n }\n }\n\n draw_texture(tex, w, h)\n {\n const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());\n this.display_texture_meshes.push(mesh);\n this.scene.add(mesh);\n\n mesh.material.set_texture(tex, w, h);\n return mesh;\n }\n\n render(graphics)\n {\n for (let i = 0; i < this.display_texture_meshes.length; i++)\n {\n this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);\n }\n if (this.scene.children.length > 0)\n {\n graphics.render(this.scene, CameraManager.current);\n }\n }\n}\n\nconst debug = new Debug();\nexport { debug as Debug };\n","class EventManager\n{\n init()\n {\n this.queue = {};\n\n this.zoom_changed_evt = 'zoom_changed';\n this.store_clickd_evt = 'store_clicked';\n this.point_selected_evt = 'point_selected';\n this.config_changed = 'config_changed';\n\n this.path_substep_completed = 'path_substep_completed';\n this.path_completed = 'path_completed';\n this.go_to_store_requested_evt = 'go_to_store_requested';\n\n this.resource_loaded_evt = 'resource_loaded';\n this.service_clicked_evt = 'service_clicked';\n this.unit_pos_updated_evt = 'unit_position_updated';\n\n this.floor_changed_evt = 'floor_changed';\n\n this.on_enter_floor_navigation = 'on_enter_floor_navigation';\n this.on_exit_floor_navigation = 'on_exit_floor_navigation';\n\n this.on_enter_floor_selection = 'on_enter_floor_selection';\n this.on_exit_floor_selection = 'on_exit_floor_selection';\n\n this.on_enter_outside_navigation = 'on_enter_outside_navigation';\n this.on_exit_outside_navigation = 'on_exit_outside_navigation';\n\n this.step_selected_evt = 'step_selected';\n }\n\n fire(event, payload)\n {\n const queue = this.queue[event];\n\n if (queue === undefined)\n {\n return;\n }\n let i = queue.length;\n while (i--)\n {\n queue[i](payload);\n }\n }\n\n on(event, callback)\n {\n if (typeof this.queue[event] === 'undefined')\n {\n this.queue[event] = [];\n }\n\n this.queue[event].push(callback);\n }\n\n fire_zoom_changed(zoom)\n {\n this.fire(this.zoom_changed_evt, zoom);\n }\n\n fire_store_selected(store_id)\n {\n this.fire(this.store_clickd_evt, store_id);\n }\n\n fire_point_selected(hit_data)\n {\n this.fire(this.point_selected_evt, hit_data);\n }\n\n fire_config_changed()\n {\n this.fire(this.config_changed);\n }\n\n fire_path_substep_completed(step_number)\n {\n this.fire(this.path_substep_completed, step_number);\n }\n\n fire_path_completed()\n {\n this.fire(this.path_completed);\n }\n\n fire_step_selected(step_index)\n {\n this.fire(this.step_selected_evt, step_index);\n }\n\n fire_go_to_store_requested(store_id)\n {\n this.fire(this.go_to_store_requested_evt, store_id);\n }\n\n fire_resource_loaded(resource)\n {\n this.fire(this.resource_loaded_evt, resource);\n }\n\n fire_service_clicked(service)\n {\n this.fire(this.service_clicked_evt, service);\n }\n\n fire_unit_position_updated(unit_data)\n {\n this.fire(this.unit_pos_updated_evt, unit_data);\n }\n\n fire_floor_switched(floor_id)\n {\n this.fire(this.floor_changed_evt, floor_id);\n }\n\n fire_on_enter_floor_navigation(state)\n {\n this.fire(this.on_enter_floor_navigation, state);\n }\n\n fire_on_exit_floor_navigation(state)\n {\n this.fire(this.on_exit_floor_navigation, state);\n }\n\n fire_on_enter_floor_selection(state)\n {\n this.fire(this.on_enter_floor_selection, state);\n }\n\n fire_on_exit_floor_selection(state)\n {\n this.fire(this.on_exit_floor_selection, state);\n }\n\n fire_on_enter_outside_navigation(state)\n {\n this.fire(this.on_enter_outside_navigation, state);\n }\n\n fire_on_exit_outside_navigation(state)\n {\n this.fire(this.on_exit_outside_navigation, state);\n }\n}\n\nconst event_manager = new EventManager();\nexport { event_manager as EventManager };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport { Scene } from 'three';\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass Blitter\n{\n constructor(renderer)\n {\n this.renderer = renderer;\n this._blit_scene = new Scene();\n this._blit_material = new BlitMaterial();\n this._blit_quad = new Mesh(\n new PlaneGeometry(1, 1), this._blit_material);\n this._blit_scene.add(this._blit_quad);\n this._blit_camera = new OrthographicCamera(-1, 1, 1, -1, -10000, 10000);\n }\n\n blit(src, dst)\n {\n this._blit_quad.material = this._blit_material;\n\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n material_pass(mat, dst)\n {\n this._blit_quad.material = mat;\n // this._blit_quad.material.uniforms._MainTex.value = undefined;\n // this._blit_quad.material.uniforms._Resolution.value.set(1, 1);\n\n this.__render(dst);\n }\n\n blit_with_material(src, dst, mat)\n {\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material = mat;\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this._blit_quad.material = mat;\n\n this.__render(dst_RT);\n }\n\n dispose()\n {\n this._blit_quad.geometry.dispose();\n this._blit_quad.material.dispose();\n }\n\n __render(RT)\n {\n RT = RT === undefined ? null : RT;\n\n const current_rt = this.renderer.getRenderTarget();\n\n this.renderer.setRenderTarget(RT === undefined ? null : RT);\n this.renderer.render(this._blit_scene, this._blit_camera);\n\n this.renderer.setRenderTarget(current_rt);\n }\n}\n\nexport { Blitter };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/clear/clear_depth_normal.frag';\n\nimport { Vector4 } from 'three';\n\nclass ClearDepthNormalMaterial extends BlitMaterial\n{\n constructor(clear_depth, clear_normal)\n {\n super(frag);\n this.uniforms._DepthNormal = { value: new Vector4(clear_depth, clear_normal.x, clear_normal.y, clear_normal.z) };\n }\n}\n\nexport { ClearDepthNormalMaterial };\n","import vert from '../shaders/depth_normals/depth_normals.vert';\nimport frag from '../shaders/depth_normals/depth_normals.frag';\n\nimport { ShaderMaterial } from 'three';\n\nclass DepthNormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n _FarPlane: { value: 1 }\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n\n set far_plane(value)\n {\n this.uniforms._FarPlane.value = value;\n }\n\n get far_plane()\n {\n return this.uniforms._FarPlane.value;\n }\n}\n\nexport { DepthNormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { OScreen } from '../OScreen';\n\nimport { ClearDepthNormalMaterial } from '../materials/ClearDepthNormalMaterial';\nimport { DepthNormalMaterial } from '../materials/DepthNormalMaterial';\n\nimport { WebGLRenderTarget } from 'three';\nimport { Vector3 } from 'three';\n\nclass DepthAndNormalsRenderer\n{\n constructor()\n {\n this.RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.clear_depth_normal_mat = new ClearDepthNormalMaterial(1, new Vector3(0, 0, 1));\n this.depth_normal_material = new DepthNormalMaterial();\n }\n\n render(graphics)\n {\n this.__resize_RT_if_necessary();\n\n graphics.clear(this.RT, undefined, true, true);\n\n graphics.blit_clear_with_material(this.RT, this.clear_depth_normal_mat);\n\n this.depth_normal_material.far_plane = CameraManager.current.far;\n\n graphics.render(undefined, undefined, this.RT, this.depth_normal_material);\n }\n\n __resize_RT_if_necessary()\n {\n if (this.RT.width !== OScreen.width || this.RT.height !== OScreen.height)\n {\n this.RT.setSize(OScreen.width, OScreen.height);\n }\n }\n\n get render_target()\n {\n return this.RT;\n }\n}\n\nexport { DepthAndNormalsRenderer };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { OScreen } from './OScreen';\nimport { SceneManager } from './SceneManager';\nimport { BaseRender } from './render_mode/BaseRender';\nimport { Blitter } from './render_utilities/Blitter';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\n\nimport {\n AlwaysDepth,\n FloatType,\n LinearSRGBColorSpace,\n NearestFilter,\n NoBlending,\n RGBAFormat,\n ShaderMaterial,\n WebGLRenderTarget\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n init({ canvas, core_attributes, context_attributes, threejs_attributes, dpr })\n {\n this._renderer = undefined;\n this.blitter = undefined;\n this.canvas = undefined;\n this.no_render = undefined;\n this.current_render_mode = undefined;\n this.generateDepthNormalTexture = false;\n this.depth_and_normals_renderer = undefined;\n\n this.is_webgl2 = false;\n this.canvas_context = undefined;\n this.context_attributes = undefined;\n\n this.core_attributes = {\n force_webgl2: true,\n xr_enabled: false\n };\n\n this.context_attributes = {\n alpha: true,\n antialias: false,\n depth: true,\n desynchronized: false,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'high-performance',\n premultipliedAlpha: true,\n preserveDrawingBuffer: true,\n stencil: false\n };\n\n this.threejs_attributes = {\n logarithmicDepthBuffer: false\n };\n\n Object.assign(this.core_attributes, core_attributes);\n Object.assign(this.context_attributes, context_attributes);\n\n Object.assign(this.threejs_attributes, this.context_attributes);\n Object.assign(this.threejs_attributes, threejs_attributes);\n\n if (this.core_attributes.force_webgl2)\n {\n this.canvas_context = canvas.getContext('webgl2', this.context_attributes) ||\n canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n else\n {\n this.canvas_context = canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n\n this.is_webgl2 = this.canvas_context.constructor.name === 'WebGL2RenderingContext';\n\n // console.log(`Using WebGL ${this.is_webgl2 ? 2 : 1}`);\n\n this.threejs_attributes.canvas = canvas;\n this.threejs_attributes.context = this.canvas_context;\n\n this._renderer = new WebGLRenderer(this.threejs_attributes);\n\n if (this.core_attributes.xr_enabled)\n {\n this._renderer.xr.enabled = true;\n }\n else\n {\n this._renderer.autoClear = false;\n }\n\n OScreen.dpr = dpr;\n this._renderer.setPixelRatio(1);\n\n if (!this.is_webgl2)\n {\n this._renderer.extensions.get('ANGLE_instanced_arrays');\n }\n\n this.blitter = new Blitter(this._renderer);\n\n this.canvas = this._renderer.domElement;\n\n this.no_render = new BaseRender();\n\n this.current_render_mode = this.no_render;\n\n Capabilities.max_anisotropy = this._renderer.capabilities.getMaxAnisotropy();\n Capabilities.vertex_texture_sampler_available = this._renderer.capabilities.maxVertexTextures > 0;\n Capabilities.fp_textures_available = this.is_floating_point_texture_available();\n\n this.generateDepthNormalTexture = false;\n\n this.depth_and_normals_renderer = new DepthAndNormalsRenderer();\n }\n\n get dom_element()\n {\n return this._renderer.domElement;\n }\n\n get depth_normals_RT()\n {\n return this.depth_and_normals_renderer.render_target;\n }\n\n set_state(new_state)\n {\n // console.log('VIEWAPI - map render mode switch to: ' + new_state.constructor.name);\n\n this.current_render_mode.on_exit(this, this._renderer);\n this.current_render_mode = new_state;\n this.current_render_mode.on_enter(this, this._renderer);\n }\n\n update()\n {\n if (this.generateDepthNormalTexture)\n {\n this.depth_and_normals_renderer.render(this);\n }\n\n this.__update_current_camera();\n\n if (CameraManager.current)\n {\n this.current_render_mode.render();\n }\n\n OScreen.update();\n }\n\n __update_current_camera()\n {\n if (CameraManager.current)\n {\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateProjectionMatrix();\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n }\n\n render(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.render(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n render_scene(scene)\n {\n if (scene.on_pre_render)\n {\n scene.on_pre_render();\n }\n\n if (scene.render)\n {\n scene.render();\n }\n else\n {\n this.render(scene, undefined);\n }\n\n if (scene.on_post_render)\n {\n scene.on_post_render();\n }\n }\n\n __apply_override_material(scene, mat)\n {\n mat = mat === undefined ? null : mat;\n if (scene)\n {\n scene.overrideMaterial = mat;\n }\n else\n {\n SceneManager.current.overrideMaterial = mat;\n }\n }\n\n readback_RT(RT, buffer)\n {\n this._renderer.readRenderTargetPixels(RT, 0, 0, RT.width, RT.height, buffer);\n }\n\n clear(RT, camera, clear_depth, clear_stencil)\n {\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n\n if (camera)\n {\n this._renderer.setClearColor(camera.clear_color, camera.clear_alpha);\n }\n\n this._renderer.clear(!!camera, // clear color\n !!clear_depth,\n !!clear_stencil);\n }\n\n on_resize(entries, dpr)\n {\n for (const entry of entries)\n {\n OScreen.dpr = dpr;\n // this._renderer.setPixelRatio(dpr);\n\n OScreen.update_position(entry.contentRect.x, entry.contentRect.y);\n OScreen.update_size(entry.contentRect.width, entry.contentRect.height);\n\n this.canvas.width = OScreen.render_width;\n this.canvas.height = OScreen.render_height;\n\n this._renderer.setViewport(0, 0, OScreen.render_width, OScreen.render_height);\n\n this.__update_current_camera();\n }\n }\n\n material_pass(mat, dst)\n {\n this.blitter.material_pass(mat, dst);\n }\n\n blit(src_RT, dst_RT, mat)\n {\n if (mat)\n {\n this.blitter.blit_with_material(src_RT, dst_RT, mat);\n }\n else\n {\n this.blitter.blit(src_RT, dst_RT);\n }\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this.blitter.blit_clear_with_material(dst_RT, mat);\n }\n\n take_screenshot(blob_callback, width = OScreen.width, height = OScreen.height)\n {\n // const ctx = this;\n\n const old_width = OScreen.width;\n const old_height = OScreen.height;\n\n const new_width = width;\n const new_height = height;\n\n const tile_width = 1024;\n const tile_height = 1024;\n\n const divisions_x = parseInt(Math.ceil(new_width / tile_width));\n const divisions_y = parseInt(Math.ceil(new_height / tile_height));\n\n OScreen.update_size(tile_width, tile_height);\n const old_dpr = this._renderer.getPixelRatio();\n this._renderer.setPixelRatio(1);\n\n this._renderer.setSize(tile_width, tile_height, false);\n\n const canvas_2d = document.createElement('canvas');\n const ctx_2D = canvas_2d.getContext('2d');\n\n ctx_2D.canvas.width = new_width;\n ctx_2D.canvas.height = new_height;\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n\n for (let x = 0; x < divisions_x; x++)\n {\n for (let y = 0; y < divisions_y; y++)\n {\n CameraManager.current.setViewOffset(new_width, new_height,\n OScreen.width * x, OScreen.height * y,\n OScreen.width, OScreen.height);\n this.current_render_mode.render();\n\n ctx_2D.drawImage(this._renderer.domElement, OScreen.width * x, OScreen.height * y);\n }\n }\n\n // transform the result canvas into a blob\n // } from them the callback turns into a ULR and download it\n ctx_2D.canvas.toBlob(blob_callback, 'image/png;base64;');\n\n CameraManager.current.clearViewOffset();\n\n OScreen.update_size(old_width, old_height);\n this._renderer.setPixelRatio(old_dpr);\n this._renderer.setSize(old_width, old_height, false);\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n\n download_screenshot(blob)\n {\n const link = document.createElement('a');\n link.download = 'Snapshot.png';\n\n link.href = URL.createObjectURL(blob);\n link.click();\n\n link.onclick = function()\n {\n requestAnimationFrame(function()\n {\n URL.revokeObjectURL(link.href);\n });\n link.removeAttribute('href');\n };\n }\n\n dispose()\n {\n this._renderer.dispose();\n this.current_render_mode.dispose();\n this.blitter.dispose();\n }\n\n is_floating_point_texture_available()\n {\n const RT = new WebGLRenderTarget(1, 1, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","class Idle\n{\n constructor()\n {\n }\n\n get is_animating()\n {\n return false;\n }\n\n on_enter(view)\n {\n\n }\n\n update(view)\n {\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Idle };\n","import { Time } from '../../Time';\nimport { Idle } from './Idle';\n\nimport { OMath } from '../../utilities/OMath';\nclass Animating\n{\n constructor()\n {\n this.t = 0;\n this.easing_function_t = 0;\n }\n\n get is_animating()\n {\n return true;\n }\n\n on_enter(animator)\n {\n }\n\n update(animator)\n {\n this.t += Time.delta_time / animator.duration;\n\n this.easing_function_t = animator.easing_function(this.t);\n this.easing_function_t = OMath.clamp(this.easing_function_t, 0, 1);\n\n animator.set_property_value(OMath.lerp(animator.from, animator.to, this.easing_function_t));\n\n if (this.easing_function_t >= 0.9999)\n {\n animator.set_property_value(animator.to);\n\n animator.set_current_state(new Idle());\n animator.finished_callback(animator);\n }\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Animating };\n","import { Animating } from './css_animator_states/Animating';\nimport { Idle } from './css_animator_states/Idle';\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass CSSAnimator\n{\n constructor({\n element,\n css_property,\n from = 0,\n to = 1,\n duration = 1,\n value_prefix = '',\n value_suffix = '',\n easing_function = EasingFunctions.ease_in_out_cubic,\n finished_callback = () =>\n {}\n })\n {\n this.element = element;\n this.css_property = css_property;\n this.from = from;\n this.to = to;\n this.value_prefix = value_prefix;\n this.value_suffix = value_suffix;\n this.duration = duration;\n this.easing_function = easing_function;\n this.finished_callback = finished_callback;\n\n this.current_state = new Idle();\n }\n\n animate()\n {\n this.set_current_state(new Animating());\n }\n\n stop()\n {\n this.set_current_state(new Idle());\n }\n\n set_property_value(value)\n {\n this.element.style[this.css_property] = `${this.value_prefix}${value}${this.value_suffix}`;\n }\n\n update()\n {\n this.current_state.update(this);\n }\n\n get is_animating()\n {\n return this.current_state.is_animating;\n }\n\n set_current_state(state)\n {\n this.current_state.on_exit(this);\n this.current_state = state;\n this.current_state.on_enter(this);\n }\n}\n\nexport { CSSAnimator };\n","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = navigator.userAgent;\n const platform = navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { EventManager } from './EventManager';\n\nclass ResourceContainer\n{\n init()\n {\n this.resources = {};\n this.resources_by_url = {};\n }\n\n set_resource(name, url, resource)\n {\n const urls = Object.keys(this.resources_by_url);\n\n if (urls.includes(url))\n {\n this.resources[name] = this.resources_by_url[url];\n }\n else\n {\n this.resources[name] = resource;\n this.resources_by_url[url] = resource;\n }\n\n EventManager.fire_resource_loaded({ name: name, value: resource });\n }\n\n get_resource(name)\n {\n return this.resources[name];\n }\n\n get(name)\n {\n return this.resources[name];\n }\n}\n\nconst resource_container = new ResourceContainer();\nexport { resource_container as ResourceContainer };\n","import { DataTexture, FloatType, Mesh, RGBAFormat, ShaderMaterial, Vector2 } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeBufferGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Debug } from './Debug';\nimport { EventManager } from './EventManager';\nimport { Graphics } from './Graphics';\nimport { OS } from './OS';\nimport { OScreen } from './OScreen';\nimport { ReflectionPlaneContext } from './ReflectionPlaneContext';\nimport { ResourceContainer } from './ResourceContainer';\nimport { SceneManager } from './SceneManager';\nimport { GeometryBatcher } from './static_batcher/GeometryBatcher';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { CameraUtilities } from './utilities/CameraUtilities';\n\nclass Initializer\n{\n constructor()\n {\n }\n\n init(input)\n {\n CameraManager.init();\n CameraUtilities.init(input);\n Capabilities.init();\n EventManager.init();\n GeometryBatcher.init();\n\n OS.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose()\n {\n Graphics.dispose();\n SceneManager.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","class KeyboardInput\n{\n init(container)\n {\n this.ctrlz_pressed = false;\n this.ctrlz_fired = false;\n\n this.keys = {};\n this.keys_keys = [];\n this.container = container;\n\n this.container.addEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.addEventListener('keyup', this.on_key_up.bind(this), false);\n }\n\n on_key_down(e)\n {\n if (e.keyCode === 90 && e.ctrlKey && !this.ctrlz_fired)\n {\n this.ctrlz_pressed = true;\n this.ctrlz_fired = true;\n }\n\n if (e.code)\n {\n this.press_key(e.code);\n }\n }\n\n on_key_up(e)\n {\n this.release_key(e.code);\n }\n\n clear()\n {\n this.ctrlz_pressed = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].pressed = false;\n this.keys[this.keys_keys[i]].released = false;\n }\n }\n\n release_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n key.fired = false;\n key.down = false;\n key.released = true;\n }\n }\n\n release_keys()\n {\n this.ctrlz_fired = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].fired = false;\n this.keys[this.keys_keys[i]].down = false;\n }\n }\n\n press_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n if (key.down === false)\n {\n key.pressed = true;\n }\n key.down = true;\n key.fired = true;\n }\n }\n\n is_key_pressed(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.pressed;\n }\n return false;\n }\n\n is_key_down(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.down;\n }\n return false;\n }\n\n is_key_released(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.released;\n }\n\n return false;\n }\n\n register_key(key)\n {\n this.keys[key] =\n {\n key_name: key,\n pressed: false,\n down: false,\n fired: false\n };\n\n this.keys_keys = Object.keys(this.keys);\n }\n\n unregister_key(key_name)\n {\n delete this.keys[key_name];\n }\n\n dispose()\n {\n this.container.removeEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.removeEventListener('keyup', this.on_key_up.bind(this), false);\n }\n}\n\nexport { KeyboardInput };\n","import { Color } from 'three';\nimport { OrthographicCamera as TOrthographicCamera } from 'three';\n\nclass OrthographicCamera extends TOrthographicCamera\n{\n constructor(left, right, top, bottom, near, far)\n {\n super(left, right, top, bottom, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { OrthographicCamera };\n","import frag from '../shaders/normal/normal.frag';\nimport vert from '../shaders/normal/normal.vert';\n\nimport { ShaderMaterial } from 'three';\n\nclass NormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n}\n\nexport { NormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\nimport { NormalMaterial } from '../materials/NormalMaterial';\n\nclass DebugNormalsRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n Graphics.render(SceneManager.current, CameraManager.current, undefined, new NormalMaterial());\n }\n}\n\nexport { DebugNormalsRender };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/depth_normals/debug_normals.frag';\nimport depth_normals_vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\n\nclass DisplayNormalTextureMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, depth_normals_vert);\n this.uniforms._FarPlane = { value: 1 };\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n }\n}\n\nexport { DisplayNormalTextureMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao_compose.frag';\n\nclass SSAOComposeMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._AO = { value: undefined };\n }\n}\n\nexport { SSAOComposeMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { DataTexture, Matrix4, RGBAFormat, RepeatWrapping, Vector3 } from 'three';\n\nimport { OMath } from '../utilities/OMath';\nclass SSAOMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, vert);\n\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n this.uniforms._ProjectionMatrix = { value: new Matrix4() };\n\n this.uniforms._Bias = { value: 0.0125 };\n this.uniforms._Radius = { value: 0.3 };\n this.uniforms._FarPlane = { value: 100 };\n\n this.uniforms._SampleKernel = { value: this.__get_sample_kernel() };\n this.uniforms._RandomRotation = { value: this.__get_rotation_kernel() };\n }\n\n __get_sample_kernel()\n {\n const sample_kernel = [];\n const kernel_size = 64;\n\n for (let i = 0; i < kernel_size; i++)\n {\n const dir = new Vector3(Math.random() * 2 - 1,\n Math.random() * 2 - 1,\n Math.random());\n dir.normalize();\n let scale = i / kernel_size;\n scale = OMath.lerp(0.1, 1.0, scale * scale);\n dir.multiplyScalar(scale);\n\n sample_kernel.push(dir);\n }\n return sample_kernel;\n }\n\n __get_rotation_kernel()\n {\n const rotation_kernel = new Uint8Array(3 * 16);\n for (let i = 0; i < 16; i++)\n {\n rotation_kernel[i * 3 + 1] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 2] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 3] = 0;\n }\n\n const rotation_texture = new DataTexture(rotation_kernel, 4, 4, RGBAFormat);\n rotation_texture.wrapS = RepeatWrapping;\n rotation_texture.wrapT = RepeatWrapping;\n\n rotation_texture.needsUpdate = true;\n return rotation_texture;\n }\n}\n\nexport { SSAOMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/box_blur/box_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass BoxBlurMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._SampleDir = { value: new Vector2() };\n }\n}\n\nexport { BoxBlurMaterial };\n","import { BoxBlurMaterial } from '../materials/BoxBlurMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass Blurrer\n{\n constructor(renderer)\n {\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.box_blur_mat = new BoxBlurMaterial();\n }\n\n blur(RT)\n {\n if (RT.width !== this.RT1.width || RT.height !== this.RT1.height)\n {\n this.RT1.setSize(RT.width, RT.height);\n this.RT2.setSize(RT.width, RT.height);\n }\n\n this.box_blur_mat.uniforms._SampleDir.value.set(1, 0);\n Graphics.blit(RT, this.RT1, this.box_blur_mat);\n this.box_blur_mat.uniforms._SampleDir.value.set(0, 1);\n Graphics.blit(this.RT1, RT, this.box_blur_mat);\n // return this.RT2;\n }\n}\n\nexport { Blurrer };\n","import { CameraManager } from '../CameraManager';\nimport { Graphics } from '../Graphics';\nimport { OScreen } from '../OScreen';\nimport { SceneManager } from '../SceneManager';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor(use_ssaa = false)\n {\n super();\n\n this.ssao_mat = new SSAOMaterial();\n this.ssao_compose_mat = new SSAOComposeMaterial();\n this.debug_normals = new DisplayNormalTextureMaterial();\n\n this.ssaa = use_ssaa ? 2 : 1;\n\n this.main_RT = new WebGLRenderTarget(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n\n this.SSAO_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.blurrer = new Blurrer();\n Graphics.generateDepthNormalTexture = true;\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n this.__update_uniforms();\n\n Graphics.blit(Graphics.depth_normals_RT, this.SSAO_RT, this.ssao_mat);\n\n // // BLUR\n this.blurrer.blur(this.SSAO_RT);\n Graphics.blit(this.SSAO_RT, undefined);\n\n // // COMPOSE\n this.ssao_compose_mat.uniforms._AO.value = this.SSAO_RT.texture;\n Graphics.blit(this.main_RT, undefined, this.ssao_compose_mat);\n\n // Graphics.blit(this.SSAO_RT, undefined);\n }\n\n __update_uniforms()\n {\n this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._ProjectionMatrix.value.copy(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._FarPlane.value = CameraManager.current.far;\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width * this.ssaa || this.main_RT.height !== OScreen.height * this.ssaa)\n {\n this.main_RT.setSize(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n this.SSAO_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { NormalAORender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass NormalRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current);\n }\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n}\n\nexport { NormalRender };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/gaussian_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass GaussianBlurMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag, undefined, {\n KERNEL_RADIUS: kernel_radius,\n SIGMA: kernel_radius\n });\n\n this.uniforms.texSize = { value: new Vector2(0.5, 0.5) };\n this.uniforms.direction = { value: new Vector2(0.5, 0.5) };\n }\n\n set_size(w, h)\n {\n this.uniforms.texSize.value.x = w;\n this.uniforms.texSize.value.y = h;\n }\n\n set_direction(x, y)\n {\n this.uniforms.direction.value.set(x, y);\n }\n}\n\nexport { GaussianBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/luminosity_high_pass/luminosity_high_pass.frag';\n\nimport { Color } from 'three';\nclass LuminosityHighPassMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag);\n\n this.uniforms.luminosityThreshold = { value: 0.23 };\n this.uniforms.smoothWidth = { value: 0.01 };\n this.uniforms.defaultColor = { value: new Color('#000000') };\n this.uniforms.defaultOpacity = { value: 0.0 };\n }\n}\n\nexport { LuminosityHighPassMaterial };\n","import { GaussianBlurMaterial } from '../materials/GaussianBlurMaterial';\nimport { LuminosityHighPassMaterial } from '../materials/LuminosityHighPassMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three';\n\nclass GaussianBlurrer\n{\n constructor(nMips = 5)\n {\n this.current_width = 1;\n this.current_height = 1;\n\n this.separableBlurMaterials = [];\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n\n this.nMips = nMips;\n this.kernelSizeArray = [3, 5, 7, 9, 11];\n this.rt_pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n this.renderTargetBright = new WebGLRenderTarget(1, 1, this.rt_pars);\n this.renderTargetBright.texture.generateMipmaps = false;\n\n this.init_materials();\n this.init_RT();\n\n this.luminosity_high_pass_mat = new LuminosityHighPassMaterial();\n }\n\n blur(RT, use_luminosity_high_pass)\n {\n this.resize_RT(RT.width, RT.height);\n\n if (use_luminosity_high_pass)\n {\n Graphics.blit(RT, this.renderTargetBright, this.luminosity_high_pass_mat);\n }\n else\n {\n Graphics.blit(RT, this.renderTargetBright);\n }\n\n let inputRenderTarget = this.renderTargetBright;\n\n for (let i = 0; i < this.nMips; i++)\n {\n const mat = this.separableBlurMaterials[i];\n\n mat.set_direction(1, 0);\n Graphics.blit(inputRenderTarget, this.renderTargetsHorizontal[i], mat);\n\n mat.set_direction(0, 1);\n Graphics.blit(this.renderTargetsHorizontal[i], this.renderTargetsVertical[i], mat);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n }\n\n get_blurred_texture()\n {\n return this.renderTargetsHorizontal[0].texture;\n }\n\n get_blurred_RT()\n {\n return this.renderTargetsHorizontal[0];\n }\n\n init_RT()\n {\n this.dispose_RT();\n\n this.renderTargetBright.setSize(1, 1);\n\n for (let i = 0; i < this.nMips; i++)\n {\n const hor = new WebGLRenderTarget(1, 1, this.rt_pars);\n const ver = new WebGLRenderTarget(1, 1, this.rt_pars);\n\n hor.texture.generateMipmaps = false;\n ver.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(hor);\n this.renderTargetsVertical.push(ver);\n }\n }\n\n resize_RT(texture_width, texture_height)\n {\n if (this.current_width === texture_width && this.current_height === texture_height)\n {\n return;\n }\n\n this.current_width = texture_width;\n this.current_height = texture_height;\n\n let width = Math.round(texture_width / 2);\n let height = Math.round(texture_height / 2);\n\n this.renderTargetBright.setSize(width, height);\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.renderTargetsVertical[i].setSize(width, height);\n this.renderTargetsHorizontal[i].setSize(width, height);\n this.separableBlurMaterials[i].set_size(width, height);\n\n width = Math.round(width / 2);\n height = Math.round(height / 2);\n }\n }\n\n init_materials(texture_width, texture_height)\n {\n this.dispose_materials();\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.separableBlurMaterials.push(new GaussianBlurMaterial(this.kernelSizeArray[i]));\n }\n }\n\n dispose_materials()\n {\n for (let i = 0; i < this.separableBlurMaterials.length; i++)\n {\n this.separableBlurMaterials[i].dispose();\n }\n this.separableBlurMaterials.length = 0;\n }\n\n dispose_RT()\n {\n for (let i = 0; i < this.renderTargetsVertical.length; i++)\n {\n this.renderTargetsHorizontal[i].dispose();\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n\n this.renderTargetsHorizontal.length = 0;\n this.renderTargetsVertical.length = 0;\n }\n}\n\nexport { GaussianBlurrer };\n","import { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { UnrealBloomComposeMaterial } from '../materials/UnrealBloomComposeMaterial';\nimport { AddMaterial } from '../materials/AddMaterial';\n\nimport { WebGLRenderTarget } from 'three';\n\nimport { GaussianBlurrer } from '../render_utilities/GaussianBlurrer';\nimport { Graphics } from '../Graphics';\nimport { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\n\nclass UnrealBloomRender extends BaseRender\n{\n constructor()\n {\n super();\n\n this.bloom_compose_mat = undefined;\n\n this.main_RT = undefined;\n this.blur_RT = undefined;\n this.blurrer = undefined;\n\n this.add_mat = new AddMaterial();\n }\n\n on_enter()\n {\n this.blurrer = new GaussianBlurrer();\n this.main_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n this.blur_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.bloom_compose_mat = new UnrealBloomComposeMaterial(5);\n this.blurrer = new GaussianBlurrer(5);\n\n this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture);\n this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture);\n this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture);\n this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture);\n this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture);\n\n this.bloom_compose_mat.set_bloom_strength(1);\n this.bloom_compose_mat.set_bloom_radius(1);\n\n this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture);\n }\n\n set_bloom_strength(val)\n {\n this.bloom_compose_mat.set_bloom_strength(val);\n }\n\n set_bloom_radius(val)\n {\n this.bloom_compose_mat.set_bloom_radius(val);\n }\n\n set_tint_color_0(col_string)\n {\n this.bloom_compose_mat.set_tint_color_0(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.bloom_compose_mat.set_tint_color_1(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.bloom_compose_mat.set_tint_color_2(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.bloom_compose_mat.set_tint_color_3(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.bloom_compose_mat.set_tint_color_4(col_string);\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n // // BLUR\n this.blurrer.blur(this.main_RT, true);\n\n // Blur compose\n Graphics.material_pass(this.bloom_compose_mat, this.blurrer.renderTargetsHorizontal[0]);\n\n // Additive blend\n Graphics.blit(this.main_RT, undefined, this.add_mat);\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width || this.main_RT.height !== OScreen.height)\n {\n this.main_RT.setSize(OScreen.width, OScreen.height);\n this.blur_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { UnrealBloomRender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass VRRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n // Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current, Graphics._renderer.getRenderTarget());\n }\n\n this.render_spectator_camera();\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n\n render_spectator_camera()\n {\n const spectator_camera = CameraManager.spectator;\n\n if (spectator_camera && Graphics._renderer.xr.isPresenting)\n {\n // Copy the XR Camera's position and rotation, but use your\n // main camera's projection matrix\n const xrCam = Graphics._renderer.xr.getCamera(CameraManager.current);\n\n spectator_camera.projectionMatrix.copy(CameraManager.current.projectionMatrix);\n\n spectator_camera.position.copy(xrCam.position);\n spectator_camera.quaternion.copy(xrCam.quaternion);\n\n // we'll restore this later\n const currentRenderTarget = Graphics._renderer.getRenderTarget();\n\n // turn off the WebXR rendering\n Graphics._renderer.xr.isPresenting = false;\n\n // render to the canvas on our main display\n Graphics._renderer.setRenderTarget(null);\n Graphics._renderer.render(SceneManager.current, spectator_camera);\n\n // reset back to enable WebXR\n Graphics._renderer.setRenderTarget(currentRenderTarget);\n Graphics._renderer.xr.isPresenting = true;\n }\n }\n}\n\nexport { VRRender };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentControllerManager\n{\n constructor()\n {\n this.component_controllers = [];\n this.enabled_component_controllers = new Set();\n }\n\n update()\n {\n this.__set_component_controllers_opacities();\n\n for (const component_controller of this.enabled_component_controllers)\n {\n component_controller.update(TransitionManager.current_state_data);\n }\n }\n\n register_component_controller(component_controller)\n {\n this.component_controllers.push(component_controller);\n }\n\n enable_component_controller(component_controller)\n {\n this.enabled_component_controllers.add(component_controller);\n }\n\n disable_component_controller(component_controller)\n {\n this.enabled_component_controllers.delete(component_controller);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n if (this.component_controllers[i].name === component_name)\n {\n return this.component_controllers[i];\n }\n }\n console.error('[ViewComponentControllerManager.get] no component_controller found for: ', component_name);\n return undefined;\n }\n\n __set_component_controllers_opacities()\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n this.component_controllers[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_contorller_manager = new ViewComponentControllerManager();\nexport { view_component_contorller_manager as ViewComponentControllerManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { VCManager } from './view_components/VCManager';\nimport { ViewComponentControllerManager } from './view_components/ViewComponentControllerManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n TransitionManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n TransitionManager.fixed_update();\n\n this.time_accumulator -= Time.fixed_delta_time;\n }\n\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n VCManager.update();\n ViewComponentControllerManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n UI.update(); // update after new camera matrix has been calculated\n UI.render(this.graphics); // render ui layer on top\n\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n\n this.target_application.on_frame_end();\n\n this.frames_passed++;\n\n UI.clear();\n Debug.clear();\n }\n\n start()\n {\n if (this.is_running) return; // sanity check\n\n if (this.frames_passed === 0)\n {\n this.target_application.on_enter();\n }\n\n this.is_running = true;\n\n this.graphics._renderer.setAnimationLoop(this.update.bind(this));\n }\n\n stop()\n {\n if (this.is_running === false) return; // sanity check\n\n this.is_running = false;\n this.target_application.on_exit();\n\n this.graphics._renderer.setAnimationLoop(null);\n }\n\n set_state(new_state)\n {\n this.target_application.on_exit(this);\n this.target_application = new_state;\n this.target_application.on_enter(this);\n }\n\n dispose()\n {\n this.stop();\n this.frames_passed = 0;\n }\n}\n\nexport { RenderLoop };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentManager\n{\n constructor()\n {\n this.components = [];\n this.enabled_components = new Set();\n }\n\n update()\n {\n this.__set_components_opacities();\n\n for (const component of this.enabled_components)\n {\n component.update(TransitionManager.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n this.enabled_components.delete(component);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { ViewComponentManager } from './ViewComponentManager';\n\nclass ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n\n // this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n\n // this.hidden = false;\n\n ViewComponentManager.enable_component(this);\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n\n // this.hidden = true;\n\n ViewComponentManager.disable_component(this);\n }\n\n set_opacity(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ViewComponent };\n","import { ViewComponentControllerManager } from './ViewComponentControllerManager';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ViewComponentController\n{\n constructor({ name })\n {\n this.name = name;\n\n this.current_opacity = 0;\n this.hidden = true;\n\n ViewComponentControllerManager.register_component_controller(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n ViewComponentControllerManager.enable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_enter`);\n\n this.hidden = false;\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_component.update`);\n }\n\n on_exit()\n {\n ViewComponentControllerManager.disable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_exit`);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n WorkerToMain.push(`${this.name}_component.set_opacity`, [opacity]);\n this.toggle_hidden();\n }\n }\n\n toggle_hidden()\n {\n if (this.current_opacity > 0.0001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n}\n\nexport { ViewComponentController };\n","import { Mesh } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass HorizontalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n geometry.rotateX(-3.14 / 2);\n super(geometry, material);\n }\n}\n\nexport { HorizontalPlane };\n","import { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass VerticalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n super(geometry, material);\n }\n}\n\nexport { VerticalPlane };\n","class ArrayUtilities\n{\n constructor()\n {}\n\n static merge_from_to(source, target)\n {\n target.push.apply(target, source);\n }\n\n static expand_vec3_array(array, size)\n {\n const items_left_count = size - array.length;\n\n for (let i = 0; i < items_left_count; i++)\n {\n array.push(array[i].clone());\n }\n }\n\n static remove_elem(array, elem)\n {\n const index = array.indexOf(elem);\n if (index > -1)\n {\n array.splice(index, 1);\n }\n }\n\n static get_closest_point(points, target)\n {\n let closest_point = points[0];\n let closest_distance = closest_point.distanceTo(target);\n for (let i = 1; i < points.length; i++)\n {\n if (points[i].distanceTo(target) < closest_distance)\n {\n closest_point = points[i];\n closest_distance = points[i].distanceTo(target);\n }\n }\n return closest_point;\n }\n\n static object_values_to_array(obj)\n {\n const ids = Object.keys(obj);\n const arr = [];\n for (let i = 0; i < ids.length; i++)\n {\n arr.push(obj[ids[i]]);\n }\n return arr;\n }\n}\n\nexport { ArrayUtilities };\n","import { Line3, Plane, Quaternion, Sphere, Vector3 } from 'three';\n\nclass FrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = Math.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n let closest_up_point = undefined;\n let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n closest_up_point = points[i];\n }\n }\n\n console.log(closest_up_point, closest_down_point);\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n let closest_right_point = undefined;\n let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n console.log(closest_right_point, closest_left_point);\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { FrustumPointFitter };\n","import { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\n\nclass GeometryUtilities\n{\n static convert_to_non_indexed_geometry(geometry_buffer)\n {\n const indices = geometry_buffer.index;\n const positions = geometry_buffer.getAttribute('position');\n\n const bar_coordinates = [];\n const vertices = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n // VERTEX 1\n vertices.push(positions.getX(indices.array[i + 0]));\n vertices.push(positions.getY(indices.array[i + 0]));\n vertices.push(positions.getZ(indices.array[i + 0]));\n\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n // VERTEX 2\n\n vertices.push(positions.getX(indices.array[i + 1]));\n vertices.push(positions.getY(indices.array[i + 1]));\n vertices.push(positions.getZ(indices.array[i + 1]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n // VERTEX 3\n\n vertices.push(positions.getX(indices.array[i + 2]));\n vertices.push(positions.getY(indices.array[i + 2]));\n vertices.push(positions.getZ(indices.array[i + 2]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n\n const geometry = new BufferGeometry();\n // geometry.setAttribute('barycentric', new BufferAttribute( new Float32Array(bar_coordinates), 3 ));\n geometry.setAttribute('position', new BufferAttribute(new Float32Array(vertices), 3));\n GeometryUtilities.add_barycentric_attribute(geometry);\n return geometry;\n }\n\n static add_barycentric_attribute(non_indexed_geometry_buffer)\n {\n const bar_coordinates = [];\n const positions = non_indexed_geometry_buffer.getAttribute('position');\n\n for (let i = 0; i < positions.count; i += 3)\n {\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n non_indexed_geometry_buffer.setAttribute('barycentric', new BufferAttribute(new Float32Array(bar_coordinates), 3));\n }\n}\n\nexport { GeometryUtilities };\n","class HTMLUtilities\n{\n static load_images(container)\n {\n const images = container.querySelectorAll('img');\n\n for (let i = 0; i < images.length; i++)\n {\n const image = images[i];\n\n if (image.dataset.src)\n {\n image.src = image.dataset.src;\n }\n }\n\n const image_objects = container.querySelectorAll('object');\n\n for (let i = 0; i < image_objects.length; i++)\n {\n const image_object = image_objects[i];\n\n if (image_object.dataset.src)\n {\n image_object.data = image_object.dataset.src;\n }\n }\n }\n\n static load_videos(container)\n {\n const videos = container.querySelectorAll('video');\n\n for (let i = 0; i < videos.length; i++)\n {\n const video = videos[i];\n\n if (video.dataset.src)\n {\n video.src = video.dataset.src;\n }\n }\n }\n\n static load_iframes(container)\n {\n const iframes = container.querySelectorAll('iframe');\n\n for (let i = 0; i < iframes.length; i++)\n {\n const iframe = iframes[i];\n\n if (iframe.dataset.src)\n {\n iframe.src = iframe.dataset.src;\n }\n }\n }\n\n static load_elements(container, selector)\n {\n const elements = container.querySelectorAll(selector);\n\n for (let i = 0; i < elements.length; i++)\n {\n const element = elements[i];\n\n if (element.dataset.src)\n {\n element.src = element.dataset.src;\n }\n }\n }\n}\n\nexport { HTMLUtilities };\n","import { Vector4 } from 'three';\n\nclass ImageUtilities\n{\n constructor()\n { }\n\n static get_image_data(image)\n {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n\n const context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n return context.getImageData(0, 0, image.width, image.height);\n }\n\n static get_pixel(imagedata, x, y)\n {\n const position = (x + imagedata.width * y) * 4;\n const data = imagedata.data;\n return new Vector4(data[position + 0], data[position + 1], data[position + 2], data[position + 3]);\n }\n}\n\nexport { ImageUtilities };\n","import { Vector3 } from 'three';\nimport { Vector2 } from 'three';\nclass MeshSampler\n{\n constructor()\n {\n\n }\n\n sample(buffer_geometry, sample_count)\n {\n const face_areas = [];\n\n let min_area = 99999999;\n\n const vertices = buffer_geometry.getAttribute('position');\n const normals = buffer_geometry.getAttribute('normal');\n const tangents = buffer_geometry.getAttribute('tangent');\n const uvs = buffer_geometry.getAttribute('uv');\n const indices = buffer_geometry.index;\n\n const faces = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n const index_0 = indices.array[i + 0];\n const index_1 = indices.array[i + 1];\n const index_2 = indices.array[i + 2];\n\n const v1 = new Vector3();\n v1.x = vertices.getX(index_0);\n v1.y = vertices.getY(index_0);\n v1.z = vertices.getZ(index_0);\n\n const v2 = new Vector3();\n v2.x = vertices.getX(index_1);\n v2.y = vertices.getY(index_1);\n v2.z = vertices.getZ(index_1);\n\n const v3 = new Vector3();\n v3.x = vertices.getX(index_2);\n v3.y = vertices.getY(index_2);\n v3.z = vertices.getZ(index_2);\n\n const face = {\n a: v1,\n b: v2,\n c: v3\n };\n\n if (normals)\n {\n const n1 = new Vector3();\n n1.x = normals.getX(index_0);\n n1.y = normals.getY(index_0);\n n1.z = normals.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = normals.getX(index_1);\n n2.y = normals.getY(index_1);\n n2.z = normals.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = normals.getX(index_2);\n n3.y = normals.getY(index_2);\n n3.z = normals.getZ(index_2);\n\n const normal = n1.clone().add(n2).add(n3).normalize();\n face.normal = normal;\n }\n\n if (tangents)\n {\n const n1 = new Vector3();\n n1.x = tangents.getX(index_0);\n n1.y = tangents.getY(index_0);\n n1.z = tangents.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = tangents.getX(index_1);\n n2.y = tangents.getY(index_1);\n n2.z = tangents.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = tangents.getX(index_2);\n n3.y = tangents.getY(index_2);\n n3.z = tangents.getZ(index_2);\n\n const tangent = n1.clone().add(n2).add(n3).normalize();\n face.tangent = tangent;\n }\n if (uvs)\n {\n const uv_a = new Vector2();\n uv_a.x = uvs.getX(index_0);\n uv_a.y = uvs.getY(index_0);\n\n const uv_b = new Vector2();\n uv_b.x = uvs.getX(index_1);\n uv_b.y = uvs.getY(index_1);\n\n const uv_c = new Vector2();\n uv_c.x = uvs.getX(index_2);\n uv_c.y = uvs.getY(index_2);\n\n face.uv_a = uv_a;\n face.uv_b = uv_b;\n face.uv_c = uv_c;\n }\n\n faces.push(face);\n\n const area = this.get_face_area(face);\n min_area = Math.min(area, min_area);\n face_areas.push(area);\n }\n\n const normalized_faces_array = this.get_uniform_face_distribution(face_areas, min_area, faces);\n const selected_faces = this.select_random_faces(normalized_faces_array, sample_count);\n const sampled_data = this.sample_data_from_faces(selected_faces);\n return sampled_data;\n }\n\n sample_data_from_faces(faces)\n {\n const sampled_points = [];\n const sampled_normals = [];\n const sampled_tangents = [];\n const sampled_uvs = [];\n\n for (let i = 0; i < faces.length; i++)\n {\n const face = faces[i];\n\n const w1 = Math.random();\n const w2 = Math.random();\n\n sampled_points.push(this.sample_point_in_face(w1, w2, face.a, face.b, face.c).clone());\n if (face.normal)\n {\n sampled_normals.push(face.normal.clone());\n }\n if (face.tangent)\n {\n sampled_tangents.push(face.tangent.clone());\n }\n if (face.uv_a)\n {\n sampled_uvs.push(this.sample_point_in_face(w1, w2, face.uv_a, face.uv_b, face.uv_c).clone());\n }\n }\n return { points: sampled_points, normals: sampled_normals, tangents: sampled_tangents, uvs: sampled_uvs };\n }\n\n select_random_faces(faces, amount)\n {\n const selected_faces = [];\n for (let i = 0; i < amount; i++)\n {\n const random = Math.floor(Math.random() * faces.length);\n const selected_face = faces[random];\n\n selected_faces.push(selected_face);\n }\n\n return selected_faces;\n }\n\n get_uniform_face_distribution(face_areas, minimum_area, faces)\n {\n const extended_triangle_indices = [];\n for (let i = 0; i < face_areas.length; i++)\n {\n face_areas[i] /= minimum_area;\n const repetitions_needed = Math.floor(Math.round(face_areas[i]));\n for (let j = 0; j < repetitions_needed; j++)\n {\n extended_triangle_indices.push(faces[i]);\n }\n }\n return extended_triangle_indices;\n }\n\n get_face_area(face)\n {\n const vec1 = face.b.clone().sub(face.a);\n const vec2 = face.c.clone().sub(face.a);\n return vec1.cross(vec2).length() / 2;\n }\n\n sample_point_in_face(w1, w2, v1, v2, v3)\n {\n if (w1 + w2 > 1)\n {\n w1 = 1.0 - w1;\n w2 = 1.0 - w2;\n }\n\n const w3 = 1.0 - (w1 + w2);\n\n return v1.clone().multiplyScalar(w1).add(v2.clone().multiplyScalar(w2)).add(v3.clone().multiplyScalar(w3));\n }\n}\n\nconst mesh_sampler = new MeshSampler();\nexport { mesh_sampler as MeshSampler };\n","import { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Skeleton } from 'three';\n\nclass ModelUtilities\n{\n get_mesh(scene, result_callback)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n if (child.geometry)\n {\n child.geometry = new BufferGeometry().fromGeometry(child.geometry);\n }\n result_callback(child);\n }\n });\n }\n\n get_geometries(scene)\n {\n const geometries = [];\n\n this.get_mesh(scene, (child) =>\n {\n geometries.push(child.geometry);\n });\n return geometries;\n }\n\n assign_material(scene, material, name)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n // assign to all if no name is given\n if (name === undefined)\n {\n child.material = material;\n }\n else\n {\n // if name is given, assign only to that\n if (child.name === name)\n {\n child.material = material;\n }\n }\n }\n });\n }\n\n clone_animated_gltf(gltf)\n {\n const clone = {\n animations: gltf.animations,\n scene: gltf.scene.clone(true)\n };\n\n const skinnedMeshes = {};\n\n gltf.scene.traverse(node =>\n {\n if (node.isSkinnedMesh)\n {\n skinnedMeshes[node.name] = node;\n }\n });\n\n const cloneBones = {};\n const cloneSkinnedMeshes = {};\n\n clone.scene.traverse(node =>\n {\n if (node.isBone)\n {\n cloneBones[node.name] = node;\n }\n\n if (node.isSkinnedMesh)\n {\n cloneSkinnedMeshes[node.name] = node;\n }\n });\n\n for (const name in skinnedMeshes)\n {\n const skinnedMesh = skinnedMeshes[name];\n const skeleton = skinnedMesh.skeleton;\n const cloneSkinnedMesh = cloneSkinnedMeshes[name];\n\n const orderedCloneBones = [];\n\n for (let i = 0; i < skeleton.bones.length; ++i)\n {\n const cloneBone = cloneBones[skeleton.bones[i].name];\n orderedCloneBones.push(cloneBone);\n }\n\n cloneSkinnedMesh.bind(\n new Skeleton(orderedCloneBones, skeleton.boneInverses),\n cloneSkinnedMesh.matrixWorld);\n }\n\n return clone;\n }\n\n set_shadow_config(scene, cast, receive)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n child.castShadow = cast;\n child.receiveShadow = receive;\n }\n });\n }\n\n __find_object(scene, object_name, result_callback)\n {\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n result_callback(obj);\n }\n });\n }\n\n get_object(scene, object_name)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n object = obj;\n }\n });\n return object;\n }\n\n get_object_by_type(scene, object_type)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.constructor.name === object_type)\n {\n object = obj;\n }\n });\n return object;\n }\n}\n\nconst model_utilities = new ModelUtilities();\nexport { model_utilities as ModelUtilities };\n","class ObjectUtilities\r\n{\r\n static is_object(item)\r\n {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n static merge_deep(target, ...sources)\r\n {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (ObjectUtilities.is_object(target) && ObjectUtilities.is_object(source))\r\n {\r\n for (const key in source)\r\n {\r\n if (ObjectUtilities.is_object(source[key]))\r\n {\r\n if (!target[key]) Object.assign(target, { [key]: {} });\r\n ObjectUtilities.merge_deep(target[key], source[key]);\r\n }\r\n else\r\n {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return ObjectUtilities.merge_deep(target, ...sources);\r\n }\r\n\r\n static xml_to_json(xml)\r\n {\r\n // Create the return object\r\n let obj = {};\r\n\r\n if (xml.nodeType === 1)\r\n { // element\r\n // do attributes\r\n if (xml.attributes.length > 0)\r\n {\r\n obj['@attributes'] = {};\r\n for (let j = 0; j < xml.attributes.length; j++)\r\n {\r\n const attribute = xml.attributes.item(j);\r\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n else if (xml.nodeType === 3)\r\n { // text\r\n obj = xml.nodeValue;\r\n }\r\n\r\n // do children\r\n if (xml.hasChildNodes())\r\n {\r\n for (let i = 0; i < xml.childNodes.length; i++)\r\n {\r\n const item = xml.childNodes.item(i);\r\n const nodeName = item.nodeName;\r\n if (typeof (obj[nodeName]) === 'undefined')\r\n {\r\n obj[nodeName] = this.xml_to_json(item);\r\n }\r\n else\r\n {\r\n if (typeof (obj[nodeName].push) === 'undefined')\r\n {\r\n const old = obj[nodeName];\r\n obj[nodeName] = [];\r\n obj[nodeName].push(old);\r\n }\r\n obj[nodeName].push(this.xml_to_json(item));\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport { ObjectUtilities };\r\n","class StringUtilities\n{\n constructor()\n {}\n\n static get_random_color()\n {\n const hexValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n let hex = '#';\n\n for (let i = 0; i < 6; i++)\n {\n const index = Math.floor(Math.random() * hexValues.length);\n hex += hexValues[index];\n }\n\n return hex;\n }\n\n static capitalize(string)\n {\n const words = string.split(' ');\n\n for (let i = 0; i < words.length; i++)\n {\n words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n }\n\n return words.join(' ');\n }\n\n static capitalize_first_letter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n static snake_to_camelcase(string)\n {\n return string.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());\n }\n}\n\nexport { StringUtilities };\n","class TimeUtilities\n{\n constructor()\n {}\n\n // Converts a time string (00:00:00.45) into miliseconds\n time_str_to_ms(time_str)\n {\n time_str = time_str.split(':');\n\n let hours = Number(time_str[0]);\n hours = hours * 60 * 60 * 1000;\n\n let minutes = Number(time_str[1]);\n minutes = minutes * 60 * 1000;\n\n let seconds = Number(time_str[2]);\n seconds = seconds * 1000;\n\n return hours + minutes + seconds;\n }\n}\n\nexport { TimeUtilities };\n","import grid_frag from '../shaders/grid/grid.frag';\nimport grid_vert from '../shaders/grid/grid.vert';\n\nimport { GeometryUtilities } from '../utilities/GeometryUtilities';\n\nimport { Mesh } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass Grid extends Mesh\n{\n constructor()\n {\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Color('#919191') }\n },\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n extensions: { derivatives: true },\n transparent: true,\n depthWrite: false\n });\n\n const plane_geometry = new PlaneGeometry(100, 100, 100, 100);\n\n const non_indexed_geometry = GeometryUtilities.convert_to_non_indexed_geometry(plane_geometry);\n\n super(non_indexed_geometry, material);\n\n this.rotation.x = -3.14 / 2;\n }\n}\n\nexport { Grid };\n","import line_vs from '../shaders/basic_line/basic_line.vert';\nimport line_fs from '../shaders/basic_line/basic_line.frag';\n\nimport { Mesh } from 'three';\nimport { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass Line extends Mesh\n{\n constructor(points)\n {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));\n geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));\n\n const material = new ShaderMaterial({\n uniforms: {\n _Thickness: { value: 0.2 },\n _Length: { value: 0 },\n _ElapsedTime: { value: 0 },\n _Color: { value: new Color('#FF0000') }\n },\n vertexShader: line_vs,\n fragmentShader: line_fs,\n transparent: true,\n depthWrite: false,\n extensions: { derivatives: true }\n\n });\n\n super(geometry, material);\n\n if (points)\n {\n this.setup(points);\n }\n }\n\n setup(points)\n {\n const vertices = [];\n const next_position = [];\n const previous_position = [];\n const orientation = [];\n const coverage = [];\n let accumulated_length = 0;\n\n for (let i = 0; i < points.length; i++)\n {\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(1);\n\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(-1);\n\n const next_point = this.__get_next_position(points, i);\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n const previous_point = this.__get_previous_position(points, i);\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n coverage.push(accumulated_length);\n coverage.push(accumulated_length);\n\n if (i < points.length - 1)\n {\n accumulated_length += points[i].distanceTo(next_point);\n }\n }\n const vertexList = new Float32Array(vertices);\n const nextPositionList = new Float32Array(next_position);\n const previousPositionList = new Float32Array(previous_position);\n const orientationList = new Float32Array(orientation);\n const coverageList = new Float32Array(coverage);\n\n const indices = [];\n for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)\n {\n const index = (i * 2) + 1;\n indices.push(index);\n indices.push(index + 1);\n indices.push(index - 1);\n\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 1);\n }\n\n this.geometry.setIndex(indices);\n this.geometry.getAttribute('position').copy(new BufferAttribute(vertexList, 3));\n this.geometry.getAttribute('next_position').copy(new BufferAttribute(nextPositionList, 3));\n this.geometry.getAttribute('previous_position').copy(new BufferAttribute(previousPositionList, 3));\n this.geometry.getAttribute('orientation').copy(new BufferAttribute(orientationList, 1));\n this.geometry.getAttribute('coverage').copy(new BufferAttribute(coverageList, 1));\n\n this.geometry.getAttribute('position').needsUpdate = true;\n this.geometry.getAttribute('next_position').needsUpdate = true;\n this.geometry.getAttribute('previous_position').needsUpdate = true;\n this.geometry.getAttribute('orientation').needsUpdate = true;\n this.geometry.getAttribute('coverage').needsUpdate = true;\n\n this.material.uniforms._Length.value = accumulated_length;\n this._length = accumulated_length;\n }\n\n set thickness(value)\n {\n this.material.uniforms._Thickness.value = value;\n }\n\n get thickness()\n {\n return this.material.uniforms._Thickness.value;\n }\n\n __get_previous_position(points, i)\n {\n if (i === 0)\n {\n return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);\n }\n else\n {\n return points[i - 1];\n }\n }\n\n __get_next_position(points, i)\n {\n if (i === points.length - 1)\n {\n return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);\n }\n else\n {\n return points[i + 1];\n }\n }\n\n update()\n {\n }\n\n distance()\n {\n return this.accumulated_length;\n }\n\n total_length()\n {\n return this.accumulated_length;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n if (this.parent)\n {\n this.parent.remove(this);\n }\n }\n\n set color(col)\n {\n this.material.uniforms._Color.value.set(col);\n }\n\n get color()\n {\n return this.material.uniforms._Color.value;\n }\n\n copy_color(col)\n {\n this.material.uniforms._Color.value.copy(col);\n }\n}\n\nexport { Line };\n","import basic_texture_vert from '../shaders/basic_texture/basic_texture.vert';\nimport basic_texture_frag from '../shaders/basic_texture/basic_texture.frag';\n\nimport { Mesh } from 'three';\nimport { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { DoubleSide } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldImage extends Mesh\n{\n constructor(texture, pivot)\n {\n pivot = pivot || new Vector2(0, 0);\n const material = new ShaderMaterial({\n uniforms: {\n _MainTex: { value: texture },\n _ScreenAligned: { value: 0 },\n _Scale: { value: 1 },\n _Opacity: { value: 1 }\n },\n vertexShader: basic_texture_vert,\n fragmentShader: basic_texture_frag,\n transparent: true,\n depthWrite: false,\n side: DoubleSide\n });\n const geometry = new PlaneGeometry(1, 1, 1);\n geometry.translate(-pivot.x / 2, -pivot.y / 2, 0);\n const current_scale = texture.image.width / texture.image.height;\n geometry.scale(current_scale, 1, 1);\n super(geometry, material);\n this.current_scale = current_scale;\n this.geometry.computeBoundingBox();\n\n this.tmp_bb_size = new Vector3();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n update_texture()\n {\n this.material.uniforms._MainTex.value.needsUpdate = true;\n const img = this.material.uniforms._MainTex.value.image;\n\n this.geometry.scale(1 / this.current_scale, 1, 1);\n this.current_scale = img.width / img.height;\n this.geometry.scale(this.current_scale, 1, 1);\n this.geometry.computeBoundingBox();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n get size()\n {\n return this.tmp_bb_size.clone().multiplyScalar(this.scale.x);\n }\n\n set size(value)\n {\n this.scale.set(value, value, value);\n this.material.uniforms._Scale.value = value;\n }\n\n set screen_aligned(boolean)\n {\n this.material.uniforms._ScreenAligned.value = boolean === true ? 1 : 0;\n }\n\n get screen_aligned()\n {\n return this.material.uniforms._ScreenAligned.value === 1;\n }\n\n set opacity(opacity)\n {\n this.material.uniforms._Opacity.value = opacity;\n }\n\n get opacity()\n {\n return this.material.uniforms._Opacity.value;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.parent.remove(this);\n this.material.uniforms._MainTex.value.dispose();\n this.material.dispose();\n }\n}\n\nexport { WorldImage };\n","import { WorldImage } from './WorldImage';\nimport { SimpleTextDrawer } from '../canvas_drawer/SimpleTextDrawer';\n\nimport { LinearMipMapLinearFilter } from 'three';\nimport { LinearFilter } from 'three';\n\nclass Text2D extends WorldImage\n{\n constructor(text, font, color, pivot, is_static)\n {\n const simple_text_drawer = new SimpleTextDrawer(is_static);\n\n const draw_settings = {\n font: font,\n font_color: color || '#000000'\n };\n const canvas_texture = simple_text_drawer.draw_on_texture(text, draw_settings);\n\n canvas_texture.minFilter = LinearMipMapLinearFilter;\n canvas_texture.minFilter = LinearFilter;\n canvas_texture.needsUpdate = true;\n super(canvas_texture, pivot);\n\n this.simple_text_drawer = simple_text_drawer;\n this.canvas_texture = canvas_texture;\n this.draw_settings = draw_settings;\n }\n\n set text(value)\n {\n this.simple_text_drawer.draw_canvas(value, this.draw_settings);\n this.update_texture();\n }\n\n get text()\n {\n return 'not implemented';\n }\n}\n\nexport { Text2D };\n","import vert from '../shaders/ui_element/ui_element.vert';\nimport frag from '../shaders/ui_element/ui_element.frag';\n\nimport { BaseShaderMaterial } from '../materials/BaseShaderMaterial';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nimport { OScreen } from '../OScreen';\n\nclass UIElementMaterial extends BaseShaderMaterial\n{\n constructor(intensity = 1)\n {\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSize: { value: new Vector2(OScreen.width, OScreen.height) },\n _TextureSize: { value: new Vector2() },\n _PixelOffset: { value: new Vector2(0, 0) },\n _NDC: { value: new Vector3() },\n _PivotPoint: { value: new Vector2() },\n _DepthOffset: { value: 0 }\n });\n this.transparent = true;\n this.depthWrite = false;\n this.depthTest = false;\n }\n}\n\nexport { UIElementMaterial };\n","import { Vector2 } from 'three';\n\nclass ScreenSpacePosition\n{\n constructor()\n {\n this.tmp_vec = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n return this.tmp_vec.set(position.x, position.y);\n }\n}\n\nexport { ScreenSpacePosition };\n","import { CameraManager } from '../../CameraManager';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldSpacePosition\n{\n constructor()\n {\n this.tmp_vec3 = new Vector3();\n this.tmp_vec2 = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n this.tmp_vec3.copy(position);\n this.tmp_vec3.project(CameraManager.current);\n\n return this.tmp_vec2.set(this.tmp_vec3.x, this.tmp_vec3.y);\n }\n}\n\nexport { WorldSpacePosition };\n","class UIElementState\n{\n constructor()\n {\n\n }\n\n update(ui_element, normalized_mouse_position)\n {\n\n }\n\n on_enter(ui_element)\n {}\n\n on_exit(ui_element)\n {}\n}\n\nexport { UIElementState };\n","import { UIElementState } from './UIElementState';\n\nclass OnIdle extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_enter_state);\n }\n }\n}\n\nexport { OnIdle };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseEnter extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_enter();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_hover_state);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n}\n\nexport { OnMouseEnter };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseExit extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_exit();\n ui_element.set_state(ui_element._on_idle_state);\n }\n}\n\nexport { OnMouseExit };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseHover extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n this.__trigger_on_hover(ui_element);\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n this.__trigger_on_hover(ui_element);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n\n __trigger_on_hover(ui_element)\n {\n ui_element.on_mouse_hover();\n }\n}\n\nexport { OnMouseHover };\n","\nimport { OScreen } from '../OScreen';\n\nimport { UIElementMaterial } from '../materials/UIElementMaterial';\n\nimport { ScreenSpacePosition } from '../ui/ui_element_position/ScreenSpacePosition';\nimport { WorldSpacePosition } from '../ui/ui_element_position/WorldSpacePosition';\n\nimport { OnIdle } from '../ui/ui_element_state/OnIdle';\nimport { OnMouseEnter } from '../ui/ui_element_state/OnMouseEnter';\nimport { OnMouseExit } from '../ui/ui_element_state/OnMouseExit';\nimport { OnMouseHover } from '../ui/ui_element_state/OnMouseHover';\n\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\nimport { NearestFilter } from 'three';\nimport { Box2 } from 'three';\n\nclass UIElement extends Mesh\n{\n constructor(vert, frag)\n {\n super(new PlaneGeometry(1, 1), new UIElementMaterial());\n\n this.is_clickable = false;\n\n this.position_strategy = new WorldSpacePosition();\n this.current_state = new OnIdle();\n\n this._position = new Vector3();\n\n this._on_idle_state = new OnIdle();\n this._on_enter_state = new OnMouseEnter();\n this._on_exit_state = new OnMouseExit();\n this._on_hover_state = new OnMouseHover();\n\n this.on_enter = undefined;\n this.on_exit = undefined;\n this.on_hover = undefined;\n\n this.mouse_pos_tmp = new Vector2();\n this.cached_NDC_position = new Vector2();\n this.screen_pos_tmp = new Vector2();\n\n this.texture_size = new Vector2(1, 1);\n\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n this.renderOrder = 0;\n\n this.size = 1;\n this.pixel_offset = new Vector2();\n }\n\n set_render_order(value)\n {\n this.renderOrder = value;\n }\n\n get pivot_point()\n {\n return this.material.uniforms._PivotPoint.value;\n }\n\n set_pixel_offset(offset)\n {\n this.pixel_offset.copy(offset);\n this.material.uniforms._PixelOffset.value.copy(offset);\n }\n\n set_state(new_state)\n {\n this.current_state.on_exit(this);\n this.current_state = new_state;\n this.current_state.on_enter(this);\n }\n\n get position()\n {\n return this._position;\n }\n\n set use_depth(boolean)\n {\n this.material.depthTest = boolean;\n }\n\n get use_depth()\n {\n return this.material.depthTest;\n }\n\n set depth_offset(value)\n {\n this.material.uniforms._DepthOffset.value = value;\n }\n\n get depth_offset()\n {\n return this.material.uniforms._DepthOffset.value;\n }\n\n clear_state()\n {\n this.visible = false;\n }\n\n set_world_space_coordinate_system()\n {\n this.position_strategy = new WorldSpacePosition();\n }\n\n set_screen_space_coordinate_system()\n {\n this.position_strategy = new ScreenSpacePosition();\n }\n\n set_texture(texture)\n {\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.needsUpdate = true;\n\n this.texture_size.set(texture.image.width, texture.image.height);\n\n this.material.uniforms._MainTex.value = texture;\n this.get_size(this.material.uniforms._TextureSize.value);\n this.visible = true;\n }\n\n update_state(normalized_mouse_pos)\n {\n this.material.uniforms._ScreenSize.value.set(OScreen.width, OScreen.height);\n this.get_size(this.material.uniforms._TextureSize.value);\n\n this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position));\n this.material.uniforms._NDC.value.copy(this.position);\n this.current_state.update(this, normalized_mouse_pos);\n }\n\n is_mouse_over(normalized_mouse_pos)\n {\n this.screen_pos_tmp.copy(this.cached_NDC_position);\n this.to_screen_position(this.screen_pos_tmp);\n this.screen_pos_tmp.x += this.pixel_offset.x;\n this.screen_pos_tmp.y += this.pixel_offset.y;\n\n const rect = new Box2().setFromCenterAndSize(this.screen_pos_tmp, this.get_size());\n\n this.mouse_pos_tmp.copy(normalized_mouse_pos);\n this.to_screen_position(this.mouse_pos_tmp);\n\n return rect.containsPoint(this.mouse_pos_tmp);\n }\n\n to_screen_position(projected_pos)\n {\n projected_pos.x = (projected_pos.x * 0.5 + 0.5) * OScreen.width + this.pixel_offset.x;\n projected_pos.y = (projected_pos.y * 0.5 + 0.5) * OScreen.height + this.pixel_offset.y;\n }\n\n get_screen_space_position()\n {\n const pos = this.cached_NDC_position.clone();\n this.to_screen_position(pos);\n return pos;\n }\n\n set_screen_space_position(screen_pos)\n {\n this.position.x = (screen_pos.x / OScreen.width) * 2 - 1;\n this.position.y = (screen_pos.y / OScreen.height) * 2 - 1;\n }\n\n dispose()\n {\n if (this.material.uniforms._MainTex.value)\n {\n this.material.uniforms._MainTex.value.dispose();\n }\n // OScreen.remove_screen_material(this.material);\n this.geometry.dispose();\n this.material.dispose();\n }\n\n get_size(vector2)\n {\n if (vector2)\n {\n return vector2.copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n else\n {\n return new Vector2().copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n }\n\n on_mouse_enter()\n {}\n\n on_mouse_exit()\n {}\n\n on_mouse_hover()\n {}\n}\n\nexport { UIElement };\n","import { Mesh } from 'three';\n\nclass UpdatableMaterialMesh extends Mesh\n{\n constructor(geometry, material)\n {\n super(geometry, material);\n\n const self = this;\n\n this.onBeforeRender = () =>\n {\n self.material.update();\n };\n }\n}\n\nexport { UpdatableMaterialMesh };\n","import { Vector2, Vector4 } from 'three';\n\nclass TextGlyph\n{\n constructor(offset, plane_bounds, atlas_bounds)\n {\n const width = plane_bounds.right - plane_bounds.left;\n const height = plane_bounds.top - plane_bounds.bottom;\n\n this.scale = new Vector2(width, height);\n this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);\n\n this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);\n }\n}\n\nexport { TextGlyph };\n","import { Vector3, Quaternion, Matrix4, Color, Box2, Vector2 } from 'three';\nimport { TextGlyph } from './TextGlyph';\n\nclass SDFText\n{\n constructor(glyph_layout, text = '')\n {\n this.glyph_layout = glyph_layout;\n\n this.glyphs = [];\n\n this.glyph_is_dirty = true;\n this.matrix_is_dirty = true;\n this.color_is_dirty = true;\n\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n\n this.color = new Color('#FFFFFF');\n\n this.pivot_point = new Vector2();\n this.__opacity = 1;\n\n this.__text = text;\n\n this.__generate_glyphs(text);\n }\n\n set text(value)\n {\n this.__text = value;\n this.__generate_glyphs(value);\n this.matrix_is_dirty = true;\n }\n\n get text()\n {\n return this.__text;\n }\n\n update_matrix()\n {\n this.matrix.compose(this.position, this.quaternion, this.scale);\n this.matrix_is_dirty = false;\n this.glyph_is_dirty = true;\n }\n\n clear_glyph_dirty()\n {\n this.glyph_is_dirty = false;\n }\n\n clear_color_dirty()\n {\n this.color_is_dirty = false;\n }\n\n set_rotation(orientation = 0, tilt = 0) // 0..360, -90..0..90\n {\n const new_orientation = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), (orientation / 360) * Math.PI * 2);\n const new_tilt = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), (-tilt / 360) * Math.PI * 2);\n\n this.quaternion.copy(new_orientation.multiply(new_tilt));\n this.matrix_is_dirty = true;\n }\n\n set_position(pos)\n {\n this.position.copy(pos);\n this.matrix_is_dirty = true;\n }\n\n set_size(size)\n {\n this.scale.set(size, size, size);\n this.matrix_is_dirty = true;\n }\n\n set_color(col)\n {\n this.color.set(col);\n this.color_is_dirty = true;\n }\n\n set_pivot(pivot)\n {\n this.pivot_point.copy(pivot);\n this.update_glyphs();\n }\n\n set opacity(op)\n {\n this.__opacity = op;\n this.color_is_dirty = true;\n }\n\n get opacity()\n {\n return this.__opacity;\n }\n\n update_glyphs()\n {\n this.__generate_glyphs(this.text);\n }\n\n __generate_glyphs(text)\n {\n let cursor = 0;\n\n this.glyphs.length = 0;\n\n for (let i = 0; i < text.length; i++)\n {\n const unicode = text.charCodeAt(i);\n const glyph = this.glyph_layout.find(element => element.unicode === unicode);\n if (glyph)\n {\n if (glyph.planeBounds)\n {\n const text_glyph = new TextGlyph(cursor, glyph.planeBounds, glyph.atlasBounds);\n this.glyphs.push(text_glyph);\n }\n cursor += glyph.advance;\n }\n }\n\n const box2 = new Box2();\n const first_glyph = this.glyphs[0];\n box2.setFromCenterAndSize(first_glyph.position.clone().add(new Vector2(first_glyph.scale.x / 2, first_glyph.scale.y / 2)), first_glyph.scale);\n\n for (let i = 1; i < this.glyphs.length; i++)\n {\n const g = this.glyphs[i];\n const box = new Box2().setFromCenterAndSize(g.position.clone().add(new Vector2(g.scale.x / 2, g.scale.y / 2)), g.scale);\n box2.union(box);\n }\n\n const box2_size = new Vector2();\n box2.getSize(box2_size);\n for (let i = 0; i < this.glyphs.length; i++)\n {\n this.glyphs[i].position.x -= box2_size.x / 2;\n this.glyphs[i].position.y -= box2_size.y / 2;\n\n this.glyphs[i].position.x += (box2_size.x / 2) * this.pivot_point.x;\n this.glyphs[i].position.y += (box2_size.y / 2) * this.pivot_point.y;\n }\n\n this.glyph_is_dirty = true;\n }\n}\n\nexport { SDFText };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\n\nimport frag from '../shaders/sdf_text/sdf_text.frag';\nimport vert from '../shaders/sdf_text/sdf_text.vert';\n\nimport { Vector2, DoubleSide, LinearFilter } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass SDFTextMaterial extends BaseShaderMaterial\n{\n constructor(texture)\n {\n super(vert, frag, {\n _Texture: { value: texture },\n _Boldness: { value: 0.5 },\n _AtlasSize: { value: new Vector2(1, 1) }\n });\n\n this.transparent = true;\n this.extensions = {\n derivatives: true\n };\n this.depthWrite = false;\n this.side = DoubleSide;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipMaps = false;\n }\n\n set_atlas_size(size)\n {\n this.uniforms._AtlasSize.value.copy(size);\n }\n\n set_boldness(value)\n {\n this.uniforms._Boldness.value = OMath.lerp(0.5, 0.2, value);\n }\n}\n\nexport { SDFTextMaterial };\n","import { SDFText } from './SDFText';\nimport { SDFTextMaterial } from '../../materials/SDFTextMaterial';\nimport { ArrayUtilities } from '../../utilities/ArrayUtilities';\n\nimport {\n PlaneGeometry,\n Mesh,\n Vector2,\n InstancedBufferGeometry,\n InstancedBufferAttribute,\n Float32BufferAttribute,\n DynamicDrawUsage\n} from 'three';\n\nclass SDFTextBatch extends Mesh\n{\n constructor(font_layout, atlas_texture)\n {\n const max_allocations = 2000;\n\n const instanced_geometry = new InstancedBufferGeometry();\n instanced_geometry.instanceCount = 0;\n\n const geometry = new PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));\n instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));\n instanced_geometry.index = geometry.index;\n\n const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n transformsCol0.usage = DynamicDrawUsage;\n transformsCol1.usage = DynamicDrawUsage;\n transformsCol2.usage = DynamicDrawUsage;\n transformsCol3.usage = DynamicDrawUsage;\n glyph_bounds.usage = DynamicDrawUsage;\n plane_bounds.usage = DynamicDrawUsage;\n color.usage = DynamicDrawUsage;\n\n instanced_geometry.setAttribute('transformsCol0', transformsCol0);\n instanced_geometry.setAttribute('transformsCol1', transformsCol1);\n instanced_geometry.setAttribute('transformsCol2', transformsCol2);\n instanced_geometry.setAttribute('transformsCol3', transformsCol3);\n\n instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);\n instanced_geometry.setAttribute('plane_bounds', plane_bounds);\n instanced_geometry.setAttribute('color', color);\n\n super(instanced_geometry, new SDFTextMaterial(atlas_texture));\n\n this.text_elements = [];\n this.font_layout = font_layout;\n\n this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));\n\n this.frustumCulled = false;\n }\n\n set_boldness(value)\n {\n this.material.set_boldness(value);\n }\n\n add_text(text_str)\n {\n const elem = new SDFText(this.font_layout.glyphs, text_str);\n this.text_elements.push(elem);\n return elem;\n }\n\n remove_text(text_elem)\n {\n ArrayUtilities.remove_elem(this.text_elements, text_elem);\n this.update(true);\n }\n\n update(force_update)\n {\n const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');\n const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');\n\n const transformsCol0 = this.geometry.getAttribute('transformsCol0');\n const transformsCol1 = this.geometry.getAttribute('transformsCol1');\n const transformsCol2 = this.geometry.getAttribute('transformsCol2');\n const transformsCol3 = this.geometry.getAttribute('transformsCol3');\n\n const color_atr = this.geometry.getAttribute('color');\n\n let matrix_needs_update = force_update === true;\n let glyph_needs_update = force_update === true;\n let color_needs_update = force_update === true;\n\n let glyph_count = 0;\n for (let i = 0; i < this.text_elements.length; i++)\n {\n const text = this.text_elements[i];\n\n if (text.matrix_is_dirty)\n {\n matrix_needs_update = true;\n text.update_matrix();\n }\n\n if (text.glyph_is_dirty)\n {\n glyph_needs_update = true;\n text.clear_glyph_dirty();\n }\n\n if (text.color_is_dirty)\n {\n color_needs_update = true;\n text.clear_color_dirty();\n }\n\n const matrix = text.matrix;\n const color = text.color;\n const opacity = text.opacity;\n\n for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)\n {\n const glyph = text.glyphs[glyph_i];\n\n const buffer_i = glyph_count;\n\n glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);\n plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);\n\n transformsCol0.setXYZW(buffer_i, matrix.elements[0],\n matrix.elements[1],\n matrix.elements[2],\n matrix.elements[3]);\n\n transformsCol1.setXYZW(buffer_i, matrix.elements[4],\n matrix.elements[5],\n matrix.elements[6],\n matrix.elements[7]);\n\n transformsCol2.setXYZW(buffer_i, matrix.elements[8],\n matrix.elements[9],\n matrix.elements[10],\n matrix.elements[11]);\n\n transformsCol3.setXYZW(buffer_i, matrix.elements[12],\n matrix.elements[13],\n matrix.elements[14],\n matrix.elements[15]);\n\n color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);\n\n glyph_count++;\n }\n }\n\n this.geometry.instanceCount = glyph_count;\n\n if (glyph_count > this.max_allocations)\n {\n console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);\n }\n\n if (matrix_needs_update)\n {\n transformsCol0.needsUpdate = true;\n transformsCol1.needsUpdate = true;\n transformsCol2.needsUpdate = true;\n transformsCol3.needsUpdate = true;\n }\n if (glyph_needs_update)\n {\n glyph_bounds_atr.needsUpdate = true;\n plane_bounds_atr.needsUpdate = true;\n }\n if (color_needs_update)\n {\n color_atr.needsUpdate = true;\n }\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\n\nexport { SDFTextBatch };\n","import { ActionInterpolator } from './ActionInterpolator';\n\nclass VectorInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n }\n\n update(context, t)\n {\n const tmp = this.from.clone();\n tmp.lerp(this.to, this.easing_function(t));\n context[this.attribute_name].copy(tmp);\n }\n}\n\nexport { VectorInterpolator };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport downsample_frag from '../shaders/dual_filter_blur/downsample.frag';\nimport upsample_frag from '../shaders/dual_filter_blur/upsample.frag';\n\nclass DualFilteringBlurMaterial extends BlitMaterial\n{\n constructor(upsample)\n {\n super(upsample ? upsample_frag : downsample_frag);\n }\n}\n\nexport { DualFilteringBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/dual_filter_blur/alpha_filter.frag';\n\nclass AlphaFilterMaterial extends BlitMaterial\n{\n constructor(use_alpha_mask, upsample)\n {\n super(frag);\n }\n\n set offset(value)\n {\n this.uniforms._Offset.value = value;\n }\n\n get offset()\n {\n return this.uniforms._Offset.value;\n }\n}\n\nexport { AlphaFilterMaterial };\n","import { DualFilteringBlurMaterial } from '../materials/DualFilteringBlurMaterial';\nimport { AlphaFilterMaterial } from '../materials/AlphaFilterMaterial';\nimport { Graphics } from '../Graphics';\nimport { WebGLRenderTarget } from 'three';\nclass DualFilteringBlurrer\n{\n constructor(use_alpha_mask)\n {\n this.current_width = 1;\n this.current_height = 1;\n this.RT0 = new WebGLRenderTarget(1, 1);\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.RT3 = new WebGLRenderTarget(1, 1);\n this.RT4 = new WebGLRenderTarget(1, 1);\n\n this.upscale_blur_mat = new DualFilteringBlurMaterial(true);\n this.downscale_blur_mat = new DualFilteringBlurMaterial(false);\n\n this.alpha_filter_mat = new AlphaFilterMaterial();\n }\n\n blur(RT)\n {\n this.check_RT_resize(RT.width, RT.height);\n Graphics.blit(RT, this.RT1, this.alpha_filter_mat);\n\n // Graphics.blit(this.RT0, this.RT1, this.downscale_blur_mat);\n Graphics.blit(this.RT1, this.RT2, this.downscale_blur_mat);\n Graphics.blit(this.RT2, this.RT3, this.downscale_blur_mat);\n Graphics.blit(this.RT3, this.RT4, this.downscale_blur_mat);\n\n // Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n // Graphics.blit(this.RT3, this.RT4, this.upscale_blur_mat);\n Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n Graphics.blit(this.RT3, this.RT2, this.upscale_blur_mat);\n Graphics.blit(this.RT2, RT, this.upscale_blur_mat);\n // Graphics.blit(this.RT1, RT, this.upscale_blur_mat);\n\n // return this.RT2;\n }\n\n check_RT_resize(width, height)\n {\n if (this.current_width !== width || this.current_height !== height)\n {\n this.current_width = width;\n this.current_height = height;\n this.RT0.setSize(this.current_width / 2, this.current_height / 2);\n this.RT1.setSize(this.current_width / 2, this.current_height / 2);\n this.RT2.setSize(this.current_width / 4, this.current_height / 4);\n this.RT3.setSize(this.current_width / 8, this.current_height / 8);\n this.RT4.setSize(this.current_width / 16, this.current_height / 16);\n }\n }\n}\n\nexport { DualFilteringBlurrer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/median_filter/median_filter.frag';\n\nimport { Vector2 } from 'three';\n\nclass MedianFilterMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, undefined, {\n kernel3x3: true\n });\n\n this.uniforms._SourceTex = { value: undefined };\n this.uniforms._SourceTexSize = { value: new Vector2(1, 1) };\n }\n\n set_texture(tex)\n {\n this.uniforms._SourceTex.value = tex;\n\n const size = this.get_size(tex);\n this.uniforms._SourceTexSize.value.copy(size);\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilterMaterial };\n","import { MedianFilterMaterial } from '../materials/MedianFilterMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, Vector2, RGBAFormat, FloatType, NearestFilter } from 'three';\n\nclass MedianFilter\n{\n constructor(renderer)\n {\n this.RT = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.RT1 = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n\n this.median_filter_mat = new MedianFilterMaterial();\n }\n\n filter(texture)\n {\n const tex_size = this.get_size(texture);\n if (tex_size.x !== this.RT.width || tex_size.y !== this.RT.height)\n {\n this.RT.setSize(tex_size.x, tex_size.y);\n this.RT1.setSize(tex_size.x, tex_size.y);\n }\n\n this.median_filter_mat.set_texture(texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n\n for (let i = 0; i < 0; i++)\n {\n this.median_filter_mat.set_texture(this.RT.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT1);\n\n this.median_filter_mat.set_texture(this.RT1.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n }\n\n return this.RT;\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilter };\n","import { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, LinearSRGBColorSpace, NearestFilter, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { FloatType, RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeBufferGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nclass AsyncTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size, flipY = true, premultiplyAlpha = false, colorSpaceConversion = true)\r\n {\r\n super(resource_id, url, size);\r\n\r\n this.original_url = '';\r\n\r\n this.colorSpaceConversion = colorSpaceConversion;\r\n this.premultiplyAlpha = premultiplyAlpha;\r\n this.flipY = flipY;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (Browser.is_safari) // && Browser.version < 15\r\n {\r\n this.load_with_old_method(resource_container);\r\n }\r\n else\r\n {\r\n this.load_with_new_method(resource_container);\r\n }\r\n }\r\n\r\n load_with_old_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const texture = new Texture();\r\n const image = new Image();\r\n\r\n image.src = this.url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('The source image could not be decoded.', this.original_url);\r\n };\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n load_with_new_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const fetchOptions = {};\r\n fetchOptions.credentials = 'same-origin';\r\n // fetchOptions.headers = this.requestHeader;\r\n\r\n fetch(this.url, fetchOptions).then((res) =>\r\n {\r\n return res.blob();\r\n }).then((blob) =>\r\n {\r\n return createImageBitmap(blob, {\r\n colorSpaceConversion: this.colorSpaceConversion ? 'default' : 'none',\r\n imageOrientation: this.flipY ? 'flipY' : 'none',\r\n premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none'\r\n });\r\n }).then((imageBitmap) =>\r\n {\r\n const texture = new Texture(imageBitmap);\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }).catch((e) =>\r\n {\r\n console.error(e, this.original_url);\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { AsyncTextureLoader };\r\n","import { Audio as TAudio } from 'three';\nimport { PositionalAudio as TPositionalAudio } from 'three';\n\nclass AudioClip\n{\n constructor(buffer, loop = true, volume = 1, positional = false)\n {\n this.buffer = buffer;\n this.loop = loop;\n this.volume = volume;\n this.positional = positional;\n\n this.audio = undefined;\n }\n\n init(audio_listener)\n {\n if (this.positional)\n {\n this.audio = new TPositionalAudio(audio_listener);\n }\n else\n {\n this.audio = new TAudio(audio_listener);\n }\n\n this.audio.setBuffer(this.buffer);\n this.audio.setLoop(this.loop);\n\n // This prevents undesired volume at the beginning of playing\n this.audio.gain.gain.value = 0;\n\n this.audio.setVolume(this.loop ? 0 : this.volume);\n }\n\n play()\n {\n this.audio.play();\n }\n\n pause()\n {\n this.audio.pause();\n }\n\n stop()\n {\n this.audio.stop();\n }\n\n get is_playing()\n {\n return this.audio.isPlaying;\n }\n}\n\nexport { AudioClip };\n","import { AudioContext } from 'three';\r\n\r\nimport { AudioClip } from '../components/AudioClip';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nclass AudioLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loop = true, volume = 0, size, positional = false)\r\n {\r\n super(resource_id, url, size);\r\n this.loop = loop;\r\n this.volume = volume;\r\n this.positional = positional;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n // if (!window.user_interaction_for_audio)\r\n // {\r\n // setTimeout(this.on_preloaded_finished.bind(this, resource_container), 100);\r\n // }\r\n // else\r\n // {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.instantiate_audio(resource_container);\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n // }\r\n }\r\n\r\n instantiate_audio(resource_container)\r\n {\r\n const context = AudioContext.getContext();\r\n\r\n const buffer = context.createBuffer(2, 22050, 44100);\r\n\r\n fetch(this.url).then(r => r.blob()).then((response) =>\r\n {\r\n if (response.arrayBuffer)\r\n {\r\n response.arrayBuffer().then((array_buffer) =>\r\n {\r\n context.decodeAudioData(array_buffer, (audio_buffer) =>\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(audio_buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n });\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport { AudioLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\r\n\r\nclass DAELoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new ColladaLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { DAELoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass FileLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (file) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, file);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { FileLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { FontLoader as TFontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\n\nclass FontLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TFontLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (font) =>\n {\n resource_container.set_resource(this.resource_id, this.url, font);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { FontLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFDRACOLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loader, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new GLTFLoader();\r\n\r\n this.loader.setDRACOLoader(loader);\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFDRACOLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader as TGLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TGLTFLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\nimport { UnsignedByteType } from 'three';\r\n\r\nclass HDRCubeTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new THDRCubeTextureLoader();\r\n this.url_suffix = ['/px.hdr', '/nx.hdr', '/py.hdr', '/ny.hdr', '/pz.hdr', '/nz.hdr'];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.setPath(this.url)\r\n .setDataType(UnsignedByteType)\r\n .load(this.url_suffix, (hdr) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, hdr);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { HDRCubeTextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass JSONLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.json().then((json) =>\n {\n resource_container.set_resource(this.resource_id, this.url, json);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { JSONLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { OBJLoader as TOBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\n\nclass OBJLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TOBJLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (obj) =>\n {\n resource_container.set_resource(this.resource_id, this.url, obj);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { OBJLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { Vector3 } from 'three';\nimport { FileLoader } from 'three';\n\nclass PointArrayLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new FileLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (text) =>\n {\n resource_container.set_resource(this.resource_id, this.url, this.parse_path(text));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n\n parse_path(raw_data)\n {\n const string_array = raw_data.split('\\n');\n\n if (string_array[string_array.length - 1] === '')\n {\n string_array.pop();\n }\n\n const positions = [];\n\n for (let i = 0; i < string_array.length; i += 3)\n {\n const x = parseFloat(string_array[i + 0]);\n const y = parseFloat(string_array[i + 1]);\n const z = parseFloat(string_array[i + 2]);\n positions.push(new Vector3(x, y, z));\n }\n return positions;\n // let curve = new THREE.CatmullRomCurve3(positions);\n // return curve.getPoints(100);\n }\n}\n\nexport { PointArrayLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\n\nclass RGBETextureLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new RGBELoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (hdr) =>\n {\n resource_container.set_resource(this.resource_id, this.url, hdr);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { RGBETextureLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass TextLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { Texture } from 'three';\r\n\r\nclass TextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n response.blob().then((blob) =>\r\n {\r\n const texture = new Texture();\r\n\r\n const url = URL.createObjectURL(blob);\r\n\r\n const image = new Image();\r\n image.src = url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('Error loading texture. Maybe the resource is not an image?', this.url);\r\n };\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass VideoLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.blob().then((blob) =>\n {\n resource_container.set_resource(this.resource_id, this.url, URL.createObjectURL(blob));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { VideoLoader };\n","import { ResourceContainer } from '../ResourceContainer';\r\n\r\nclass ResourceBatch\r\n{\r\n constructor(batch_name)\r\n {\r\n this.resource_loaders = [];\r\n this.batch_name = batch_name || 'unnamed batch';\r\n }\r\n\r\n add_loader(loader)\r\n {\r\n this.resource_loaders.push(loader);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n this.resource_loaders[i].load(resource_container || ResourceContainer);\r\n }\r\n }\r\n\r\n get loading_finished()\r\n {\r\n let finished = true;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n finished = finished && this.resource_loaders[i].has_finished;\r\n }\r\n return finished;\r\n }\r\n\r\n get has_errors()\r\n {\r\n let has_error = false;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n has_error = has_error || this.resource_loaders[i].has_error;\r\n }\r\n return has_error;\r\n }\r\n\r\n print_errors()\r\n {\r\n console.error('Batch <' + this.batch_name + '> could not load successfully');\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n if (this.resource_loaders[i].has_error)\r\n {\r\n this.resource_loaders[i].print_error();\r\n }\r\n }\r\n }\r\n\r\n get_progress()\r\n {\r\n return this.get_loaded_bytes() / this.get_total_bytes();\r\n }\r\n\r\n get_loaded_bytes()\r\n {\r\n let loaded_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n loaded_bytes += this.resource_loaders[i].loaded_bytes;\r\n }\r\n\r\n return loaded_bytes;\r\n }\r\n\r\n get_total_bytes()\r\n {\r\n let total_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n total_bytes += this.resource_loaders[i].total_bytes;\r\n }\r\n\r\n return total_bytes;\r\n }\r\n}\r\n\r\nexport { ResourceBatch };\r\n"],"names":["BaseApplication","on_post_start","on_enter","on_exit","before_update","update","fixed_update","on_post_render","on_pre_render","on_frame_end","dispose","BlitMaterial","ShaderMaterial","constructor","frag_shader","vert_shader","defines","super","uniforms","_MainTex","value","_Resolution","Vector2","_TargetResolution","vertexShader","fragmentShader","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","this","_SecondTex","undefined","set_add_texture","tex","BaseShaderMaterial","vert","frag","basic_vert","basic_frag","_Color","Color","UnrealBloomComposeMaterial","NUM_MIPS","_BlurredTex","_BloomStrength","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","bloomStrength","bloomFactors","bloomRadius","bloomTintColors","set_RT_0","rt","set_RT_1","set_RT_2","set_RT_3","set_RT_4","set_bloom_strength","set_bloom_radius","set_tint_color_0","col_string","set","set_tint_color_1","set_tint_color_2","set_tint_color_3","set_tint_color_4","BaseRender","render","context","renderer","resize","browser","init","opr","chrome","browser_name","agent","navigator","userAgent","toLowerCase","vr_browser_keywords","vr_browser_name","find","keyword","includes","has_web_xr_support","indexOf","version","get_version","name","is_safari","is_chrome","is_edge","is_edge_chromium","is_vr","has_webm","is_firefox","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","replace","appName","appVersion","splice","Number","split","Validation","is_int","n","is_float","is_number","is_json","str","JSON","parse","e","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","Browser","fetch","method","mode","credentials","redirect","then","on_progress","bind","catch","__on_error","set_resource","response","response_clone","clone","reader","body","getReader","contentLength","headers","get","receivedLength","done","read","length","on_preloaded_finished","data","view_manager","views","main_to_worker","browser_title_suffix","go_to_view","view_name","change_url","skip","v","__change_browser_url","__change_browser_title","post","view_controller_name","go_to_scene","scene_name","transition_view","set_next_view_name","set_browser_title_suffix","title_suffix","i","get_by_url","register_view","view","push","set_main_to_worker","window","history","pushState","title","__capitalize","document","string","aux_string","toUpperCase","__snake_to_whitespace","group","ViewState","start","show","hide","before_enter","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","before_exit","ApplicationView","container","ViewManager","classList","add","remove","set_opacity","opacity","style","ActionEvent","args","trigger","ViewApi","application","OMath","linear_map","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","between","min","max","mod","number","divisor","rgb_to_hex","rgb","r","Math","round","toString","g","b","project_points_on_plane","points","plane","projected_point","points_on_plane","projectPoint","matrix4_lerp","from","to","target","t","elements","lerp","equals","x1","x2","abs","x","y","clamp","euclideanModulo","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","w","z","points_average","center","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","transitions_velocity","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","stringify","tmp_t","channels","channel_names","Object","keys","duration","play","stop","reset","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","get_progress","is_finished","add_action_event","trigger_time","action","add_action_interpolator","interpolator","use_dynamic_from_value","keyframes","attribute_name","keyframe","get_current_target_value","__get_current_keyframe","evaluate","get_current_starting_value","get_current_progress","__linear_map_01","easing_function","__play_events","evaluate_keyframe","log","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","NumberInterpolator","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","getAttribute","get_node_x_position","parseFloat","split_data","trigger_name","trigger_method","at_time","value_data","to_value","from_time","to_time","sort","a","x_pos","ActionSequencerBuilder","default_state_data","from_animation_sheet","animation_data","current_context","tracks","initial_tracks","state_to_tracks","get_longest_time","element","sequencer","action_event","state","longest_time","from_draw_io","xml","transition_data","track_time","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","set_transitions_velocity","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","transition_manager","transition_handler","ViewControllerManager","view_controllers","go_to_view_controller","TransitionManager","__set_view_controllers_opacities","register_view_controller","view_controller","set_view_controller","get_current_view_controller","v_c_manager","worker_to_main","methods","clear","ApplicationViewController","current_opacity","VCManager","WorkerToMain","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getContext","getFontHeight","fontStyle","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","removeChild","get_text_size","text","font","ceil","measureText","width","draw_canvas","ctxOptions","font_color","__draw","draw_on_texture","canvas_texture","CanvasTexture","UVMapping","ClampToEdgeWrapping","NearestFilter","generateMipMaps","needsUpdate","roundRect","height","radius","fill","stroke","tl","tr","br","bl","defaultRadius","side","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","SimpleTextDrawer","text_margin","text_size","clearRect","globalAlpha","fillStyle","fillRect","textBaseline","textAlign","fillText","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","AxisHelper","Object3D","scale","blue_points","Vector3","blue_axis_mat","LineBasicMaterial","color","blue_axis_geo","BufferGeometry","setFromPoints","blue_axis_line","Line","renderOrder","green_points","green_axis_mat","green_axis_geo","green_axis_line","red_points","red_axis_mat","red_axis_geo","red_axis_line","scene_manager","Scene","add_scene","scene","traverse","child","geometry","material","children","Cube","Mesh","segments","BoxGeometry","MeshBasicMaterial","Sphere","SphereGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderGeometry","translate","cone_geometry","ConeGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeBufferGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","position","render_width","render_height","width_height","dpr","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","image","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","draw_line_2D","strokeStyle","draw_line","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","depth","distanceTo","sub","forward_dir","draw_plane","PlaneGeometry","Vector4","basic_color_vert","basic_color_frag","transparent","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","event_manager","queue","zoom_changed_evt","store_clickd_evt","point_selected_evt","config_changed","path_substep_completed","path_completed","go_to_store_requested_evt","resource_loaded_evt","service_clicked_evt","unit_pos_updated_evt","floor_changed_evt","on_enter_floor_navigation","on_exit_floor_navigation","on_enter_floor_selection","on_exit_floor_selection","on_enter_outside_navigation","on_exit_outside_navigation","step_selected_evt","fire","event","payload","on","callback","fire_zoom_changed","zoom","fire_store_selected","store_id","fire_point_selected","hit_data","fire_config_changed","fire_path_substep_completed","step_number","fire_path_completed","fire_step_selected","step_index","fire_go_to_store_requested","fire_resource_loaded","resource","fire_service_clicked","service","fire_unit_position_updated","unit_data","fire_floor_switched","floor_id","fire_on_enter_floor_navigation","fire_on_exit_floor_navigation","fire_on_enter_floor_selection","fire_on_exit_floor_selection","fire_on_enter_outside_navigation","fire_on_exit_outside_navigation","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","src","dst","src_texture","isWebGLRenderTarget","texture","src_width","src_height","getSize","__render","material_pass","mat","blit_with_material","blit_clear_with_material","dst_RT","current_rt","getRenderTarget","setRenderTarget","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","clear_depth_normal_mat","depth_normal_material","__resize_RT_if_necessary","setSize","render_target","core_attributes","context_attributes","threejs_attributes","_renderer","blitter","no_render","current_render_mode","generateDepthNormalTexture","depth_and_normals_renderer","is_webgl2","canvas_context","force_webgl2","xr_enabled","alpha","antialias","desynchronized","failIfMajorPerformanceCaveat","powerPreference","premultipliedAlpha","preserveDrawingBuffer","stencil","logarithmicDepthBuffer","WebGLRenderer","xr","enabled","autoClear","setPixelRatio","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","dom_element","depth_normals_RT","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","render_scene","overrideMaterial","readback_RT","buffer","readRenderTargetPixels","clear_stencil","setClearColor","on_resize","entries","entry","contentRect","setViewport","src_RT","take_screenshot","blob_callback","old_width","old_height","new_width","new_height","tile_width","tile_height","divisions_x","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","blob","link","download","href","URL","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","colorSpace","LinearSRGBColorSpace","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","resources","EventManager","get_resource","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","index","get_mesh","v3","v4","Uint8Array","DataTexture","dst_texture","one_pixel_text","geometry_batcher","batches","batch","buffer_geometries","attr_accessor_uvs","texture_width","ceilPowerOfTwo","__init_uv_array","uv_index","vertex_count","count","buffer_attribute","BufferAttribute","uvs","ui","input","ui_elements","_tmp_normalized_pos","ss_scene","matrixWorldAutoUpdate","ws_scene","ss_camera","delete_element","elem","add_screen_space_element","set_screen_space_coordinate_system","add_world_space_element","set_world_space_coordinate_system","NDC","update_state","Graphics","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","h_fov","atan","tan","up_plane_normal","get_up_plane_normal","down_plane_normal","get_down_plane_normal","left_plane_normal","get_left_plane_normal","right_plane_normal","get_right_plane_normal","camera_forward_dir","applyQuaternion","sphere_center","pull_back_distance","get_distance_to_fit_rect","far_pos","up_plane","Plane","setFromNormalAndCoplanarPoint","down_plane","left_plane","right_plane","apply_center_correction_to_pos","closest_distance","inverse_dir","Line3","up_line_intersection","down_line_intersection","left_line_intersection","right_line_intersection","intersectLine","new_up_distance","new_down_distance","new_left_distance","new_right_distance","vertical_min","horizontal_min","forward_correction","target_pos","vertical_offset","get_vertical_correction","horizontal_offset","get_horizontal_correction","closest_distance_to_up_plane","closest_distance_to_down_plane","up_dir","down_line","up_line","down_dist","up_dist","correction","closest_distance_to_right_plane","closest_distance_to_left_plane","right_dir","left_line","right_line","left_dist","right_dist","Quaternion","setFromAxisAngle","distV","distH","OrthographicFrustumPointFitter","inverse_camera_quat","inverse","inverted_points","getCenter","distance_to_center","camera_utilities","tmp_mat","Matrix4","ray","Ray","tmp_size","tmp_unproj","get_up_dir","tmp_vec","get_forward_dir","get_right_dir","unproject_mouse_position","get_plane_intersection","plane_position","plane_normal","isPerspectiveCamera","unproject","intersectPlane","fit_points_on_camera","zoom_scale","world_space_center","camera_forward","projected_points_center","up","right","cross","inverse_mat","getInverse","applyMatrix4","projected_center","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","ResourceContainer","UI","Debug","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","addEventListener","on_key_down","on_key_up","keyCode","ctrlKey","code","press_key","release_key","pressed","released","key_name","key","fired","down","release_keys","is_key_pressed","is_key_down","is_key_released","register_key","unregister_key","removeEventListener","TOrthographicCamera","NormalMaterial","DebugNormalsRender","DisplayNormalTextureMaterial","depth_normals_vert","_InverseProjMatrix","SSAOComposeMaterial","_AO","SSAOMaterial","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","use_ssaa","ssao_mat","ssao_compose_mat","debug_normals","ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","GaussianBlurMaterial","kernel_radius","KERNEL_RADIUS","SIGMA","texSize","direction","set_size","set_direction","LuminosityHighPassMaterial","luminosityThreshold","smoothWidth","defaultColor","defaultOpacity","GaussianBlurrer","current_width","current_height","separableBlurMaterials","renderTargetsHorizontal","renderTargetsVertical","kernelSizeArray","rt_pars","LinearFilter","renderTargetBright","generateMipmaps","init_materials","init_RT","luminosity_high_pass_mat","use_luminosity_high_pass","resize_RT","inputRenderTarget","get_blurred_texture","get_blurred_RT","dispose_RT","hor","ver","texture_height","dispose_materials","UnrealBloomRender","bloom_compose_mat","blur_RT","add_mat","val","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","view_component_contorller_manager","component_controllers","enabled_component_controllers","Set","__set_component_controllers_opacities","component_controller","register_component_controller","enable_component_controller","disable_component_controller","delete","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentControllerManager","setAnimationLoop","view_component_manager","components","enabled_components","__set_components_opacities","component","register_component","enable_component","disable_component","ViewComponent","ViewComponentManager","ViewComponentController","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","array","items_left_count","remove_elem","get_closest_point","closest_point","object_values_to_array","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","convert_to_non_indexed_geometry","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","HTMLUtilities","load_images","images","dataset","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","ImageUtilities","get_image_data","getImageData","get_pixel","imagedata","mesh_sampler","sample","sample_count","face_areas","min_area","normals","tangents","faces","index_0","index_1","index_2","v1","v2","face","c","n2","n3","normal","tangent","uv_a","uv_b","uv_c","area","get_face_area","normalized_faces_array","get_uniform_face_distribution","selected_faces","select_random_faces","sample_data_from_faces","sampled_points","sampled_normals","sampled_tangents","sampled_uvs","w1","w2","sample_point_in_face","amount","selected_face","minimum_area","extended_triangle_indices","repetitions_needed","j","vec1","vec2","w3","model_utilities","result_callback","fromGeometry","get_geometries","geometries","assign_material","clone_animated_gltf","gltf","animations","skinnedMeshes","isSkinnedMesh","cloneBones","cloneSkinnedMeshes","isBone","skeleton","cloneSkinnedMesh","orderedCloneBones","bones","cloneBone","Skeleton","boneInverses","matrixWorld","set_shadow_config","cast","receive","castShadow","receiveShadow","__find_object","get_object","get_object_by_type","object_type","ObjectUtilities","is_object","item","Array","isArray","merge_deep","sources","xml_to_json","nodeType","attributes","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old","StringUtilities","hexValues","hex","capitalize","words","substr","capitalize_first_letter","charAt","snake_to_camelcase","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Grid","derivatives","plane_geometry","rotation","_Thickness","_Length","_ElapsedTime","setup","next_position","previous_position","orientation","coverage","accumulated_length","next_point","__get_next_position","previous_point","__get_previous_position","vertexList","nextPositionList","previousPositionList","orientationList","coverageList","setIndex","_length","thickness","total_length","parent","copy_color","WorldImage","pivot","_ScreenAligned","_Scale","_Opacity","DoubleSide","current_scale","computeBoundingBox","tmp_bb_size","boundingBox","update_texture","img","screen_aligned","boolean","Text2D","is_static","simple_text_drawer","draw_settings","LinearMipMapLinearFilter","UIElementMaterial","intensity","_PixelOffset","_NDC","_PivotPoint","_DepthOffset","ScreenSpacePosition","get_pos_NDC","WorldSpacePosition","tmp_vec3","tmp_vec2","UIElementState","ui_element","normalized_mouse_position","OnIdle","is_mouse_over","_on_enter_state","OnMouseEnter","on_mouse_enter","_on_hover_state","_on_exit_state","OnMouseExit","on_mouse_exit","_on_idle_state","OnMouseHover","__trigger_on_hover","on_mouse_hover","UIElement","is_clickable","position_strategy","_position","on_hover","mouse_pos_tmp","cached_NDC_position","screen_pos_tmp","texture_size","matrixAutoUpdate","pixel_offset","set_render_order","pivot_point","set_pixel_offset","use_depth","depth_offset","clear_state","visible","get_size","normalized_mouse_pos","to_screen_position","rect","Box2","containsPoint","projected_pos","get_screen_space_position","set_screen_space_position","screen_pos","UpdatableMaterialMesh","self","onBeforeRender","TextGlyph","plane_bounds","atlas_bounds","SDFText","glyph_layout","glyphs","glyph_is_dirty","matrix_is_dirty","color_is_dirty","matrix","__opacity","__text","__generate_glyphs","update_matrix","compose","clear_glyph_dirty","clear_color_dirty","set_rotation","tilt","new_orientation","new_tilt","multiply","set_color","set_pivot","update_glyphs","op","cursor","unicode","charCodeAt","glyph","planeBounds","text_glyph","atlasBounds","advance","box2","first_glyph","union","box2_size","SDFTextMaterial","_Texture","_Boldness","_AtlasSize","set_atlas_size","set_boldness","SDFTextBatch","font_layout","atlas_texture","instanced_geometry","InstancedBufferGeometry","instanceCount","Float32BufferAttribute","transformsCol0","InstancedBufferAttribute","max_allocations","transformsCol1","transformsCol2","transformsCol3","glyph_bounds","usage","DynamicDrawUsage","text_elements","atlas","add_text","text_str","remove_text","text_elem","force_update","glyph_bounds_atr","plane_bounds_atr","color_atr","matrix_needs_update","glyph_needs_update","color_needs_update","glyph_count","glyph_i","buffer_i","setXYZW","VectorInterpolator","tmp","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","original_url","load_with_old_method","load_with_new_method","Texture","Image","onload","SRGBColorSpace","NoColorSpace","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","AudioClip","loop","volume","positional","audio","audio_listener","TPositionalAudio","TAudio","setBuffer","setLoop","gain","setVolume","pause","is_playing","isPlaying","AudioLoader","instantiate_audio","AudioContext","createBuffer","arrayBuffer","array_buffer","decodeAudioData","audio_buffer","BasisLoader","loader","basis","xhr","msg","CubemapLoader","extension","CubeTextureLoader","setPath","urls","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","GLTFDRACOLoader","GLTFLoader","setDRACOLoader","TGLTFLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","url_suffix","setDataType","UnsignedByteType","hdr","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","RGBETextureLoader","RGBELoader","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"4pDAAA,MAAMA,GAEJ,aAAAC,GACE,CAEF,QAAAC,GACE,CAEF,OAAAC,GACE,CAEF,aAAAC,GACE,CAEF,MAAAC,GACE,CAEF,YAAAC,GACE,CAEF,cAAAC,GACE,CAEF,aAAAC,GACE,CAEF,YAAAC,GACE,CAEF,OAAAC,GACE,ECtBJ,MAAMC,WAAqBC,EAEzB,WAAAC,CAAYC,EAAaC,EAAaC,GAEpCC,MAAM,CACJC,SAAU,CACRC,SAAU,CAAEC,MAAO,MACnBC,YAAa,CAAED,MAAO,IAAIE,EAAQ,EAAG,IACrCC,kBAAmB,CAAEH,MAAO,IAAIE,EAAQ,EAAG,KAE7CN,QAASA,GAAW,CAAE,EACtBQ,aAAcT,mGACdU,eAAgBX,uHAChBY,YAAY,EACZC,SAAUC,EACVC,WAAW,EACXC,UAAWC,GAEd,ECtBH,MAAMC,WAAoBrB,GAExB,WAAAE,CAAYoB,GAEVhB,gMAEAiB,KAAKhB,SAASiB,WAAa,CAAEf,WAAOgB,EACrC,CAED,eAAAC,CAAgBC,GAEdJ,KAAKhB,SAASiB,WAAWf,MAAQkB,CAClC,sPCVH,MAAMC,WAA2B3B,EAE/B,WAAAC,CAAY2B,EAAMC,EAAMvB,GAEtBD,MAAM,CACJO,aAAcgB,GAAUE,GACxBjB,eAAgBgB,GAAQE,GACxBzB,SAAUA,GAAc,CACtB0B,OAAQ,CAAExB,MAAO,IAAIyB,EAAM,cAGhC,ECZH,MAAMC,WAAmCnC,GAEvC,WAAAE,CAAYoB,GAEVhB,m7BAAYmB,EAAW,CACrBW,SAAUd,IAEZC,KAAKhB,SAASC,SAAkB,CAAEC,WAAOgB,GACzCF,KAAKhB,SAAS8B,YAAkB,CAAE5B,WAAOgB,GACzCF,KAAKhB,SAAS+B,eAAkB,CAAE7B,MAAO,GAEzCc,KAAKhB,SAASgC,aAAgB,CAAE9B,MAAO,MACvCc,KAAKhB,SAASiC,aAAgB,CAAE/B,MAAO,MACvCc,KAAKhB,SAASkC,aAAgB,CAAEhC,MAAO,MACvCc,KAAKhB,SAASmC,aAAgB,CAAEjC,MAAO,MACvCc,KAAKhB,SAASoC,aAAgB,CAAElC,MAAO,MAEvCc,KAAKhB,SAASqC,cAAgB,CAAEnC,MAAO,GACvCc,KAAKhB,SAASsC,aAAgB,CAAEpC,MAAO,CAAC,EAAK,GAAK,GAAK,GAAK,KAC5Dc,KAAKhB,SAASuC,YAAgB,CAAErC,MAAO,GAEvC,MAAMsC,EAAkB,CACtB,IAAIb,EAAM,WACV,IAAIA,EAAM,WACV,IAAIA,EAAM,WACV,IAAIA,EAAM,WACV,IAAIA,EAAM,YAGZX,KAAKhB,SAASwC,gBAAkB,CAAEtC,MAAOsC,EAC1C,CAED,QAAAC,CAASC,GAEP1B,KAAKhB,SAASgC,aAAa9B,MAAQwC,CACpC,CAED,QAAAC,CAASD,GAEP1B,KAAKhB,SAASiC,aAAa/B,MAAQwC,CACpC,CAED,QAAAE,CAASF,GAEP1B,KAAKhB,SAASkC,aAAahC,MAAQwC,CACpC,CAED,QAAAG,CAASH,GAEP1B,KAAKhB,SAASmC,aAAajC,MAAQwC,CACpC,CAED,QAAAI,CAASJ,GAEP1B,KAAKhB,SAASoC,aAAalC,MAAQwC,CACpC,CAED,kBAAAK,CAAmB7C,GAEjBc,KAAKhB,SAASqC,cAAcnC,MAAQA,CACrC,CAED,gBAAA8C,CAAiB9C,GAEfc,KAAKhB,SAASuC,YAAYrC,MAAQA,CACnC,CAED,gBAAA+C,CAAiBC,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAE,CAAiBF,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAG,CAAiBH,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAI,CAAiBJ,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAK,CAAiBL,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,EC/FH,MAAMM,GAEJ,WAAA7D,GAGC,CAED,MAAA8D,GAGC,CAED,QAAAzE,CAAS0E,EAASC,GAGjB,CAED,OAAA1E,CAAQyE,EAASC,GAGhB,CAED,MAAAC,GAGC,CAED,OAAApE,GAGC,EC2FE,MAACqE,GAAU,IAxHhB,MAEE,IAAAC,CAAKC,EAAKC,GAWR,OATAhD,KAAKiD,aAAe,GACpBjD,KAAKkD,MAAQC,UAAUC,UAAUC,cAGjCrD,KAAKsD,oBAAsB,CAAC,gBAAiB,SAAU,OAAQ,OAAQ,YAAa,YAAa,WAAY,UAC7GtD,KAAKuD,gBAAkBvD,KAAKsD,oBAAoBE,MAAKC,GAAWzD,KAAKkD,MAAMQ,SAASD,KAEpFzD,KAAK2D,mBAAqB,OAAQR,WAE1B,GAER,UAA8BjD,IAAzBF,KAAKuD,iBAAiCvD,KAAK2D,mBAC9C3D,KAAKiD,aAAejD,KAAKuD,gBACzB,MACF,KAAKvD,KAAKkD,MAAMU,QAAQ,SAAW,EACjC5D,KAAKiD,aAAe,UACpB,MACF,KAAKjD,KAAKkD,MAAMU,QAAQ,QAAU,EAChC5D,KAAKiD,aAAe,gBACpB,MACF,KAAKjD,KAAKkD,MAAMU,QAAQ,QAAU,KAAOb,EACvC/C,KAAKiD,aAAe,QACpB,MACF,KAAKjD,KAAKkD,MAAMU,QAAQ,WAAa,KAAOZ,EAC1ChD,KAAKiD,aAAe,SACpB,MACF,KAAKjD,KAAKkD,MAAMU,QAAQ,YAAc,EACpC5D,KAAKiD,aAAe,YACpB,MACF,KAAKjD,KAAKkD,MAAMU,QAAQ,YAAc,EACpC5D,KAAKiD,aAAe,UACpB,MACF,KAAKjD,KAAKkD,MAAMU,QAAQ,WAAa,EACnC5D,KAAKiD,aAAe,SACpB,MACF,QACEjD,KAAKiD,aAAe,QAItBjD,KAAK6D,QAAU7D,KAAK8D,aACrB,CAED,QAAIC,GAEF,OAAO/D,KAAKiD,YACb,CAED,aAAIe,GAEF,MAA6B,WAAtBhE,KAAKiD,YACb,CAED,aAAIgB,GAEF,MAA6B,WAAtBjE,KAAKiD,YACb,CAED,WAAIiB,GAEF,MAA6B,YAAtBlE,KAAKiD,YACb,CAED,oBAAIkB,GAEF,MAA6B,kBAAtBnE,KAAKiD,YACb,CAED,SAAImB,GAEF,OAAQpE,KAAKsD,oBAAoBI,SAAS1D,KAAKiD,aAChD,CAED,YAAIoB,GAEF,SAAUrE,KAAKiE,WAAajE,KAAKsE,YAActE,KAAKmE,iBACrD,CAED,YAAII,GAEF,OAAOvE,KAAKgE,SACb,CAED,6BAAIQ,GAEF,OAAOxE,KAAKqE,SAAW,OAASrE,KAAKuE,SAAW,WAAa,KAC9D,CAED,WAAAT,GAEE,MAAMW,EAAKtB,UAAUC,UACrB,IAAIsB,EAAM,GACNb,EAAU,EAEVc,EAAIF,EAAGG,MAAM,iEAAmE,GAkBpF,MAhBI,WAAWC,KAAKF,EAAE,MAEpBD,EAAO,kBAAkBI,KAAKL,IAAO,GACrCZ,EAAW,OAASa,EAAI,IAAM,KAEnB,WAATC,EAAE,KAEJD,EAAMD,EAAGG,MAAM,uBACJ,MAAPF,IAAab,EAAUa,EAAIK,MAAM,GAAGC,KAAK,KAAKC,QAAQ,MAAO,WAGnEN,EAAIA,EAAE,GAAK,CAACA,EAAE,GAAIA,EAAE,IAAM,CAACxB,UAAU+B,QAAS/B,UAAUgC,WAAY,MACjB,OAA9CT,EAAMD,EAAGG,MAAM,6BAAqCD,EAAES,OAAO,EAAG,EAAGV,EAAI,IAE5Eb,EAAUc,EAAEK,KAAK,KAEVK,OAAOxB,EAAQyB,MAAM,KAAK,GAClC,GCtHH,MAAMC,GAEJ,WAAA5G,GACE,CAEF,aAAO6G,CAAOC,GAEZ,OAAOJ,OAAOI,KAAOA,GAAKA,EAAI,GAAM,CACrC,CAED,eAAOC,CAASD,GAEd,OAAOJ,OAAOI,KAAOA,GAAKA,EAAI,GAAM,CACrC,CAED,gBAAOE,CAAUF,GAEf,OAAOzF,KAAKwF,OAAOC,IAAMzF,KAAK0F,SAASD,EACxC,CAED,cAAOG,CAAQC,GAEb,IAEEC,KAAKC,MAAMF,EACZ,CACD,MAAOG,GAEL,OAAO,CACR,CAED,OAAO,CACR,EC7BH,MAAMC,GAEJ,WAAAtH,CAAYuH,EAAaC,EAAKC,EAAO,GAEnCpG,KAAKkG,YAAcA,EACnBlG,KAAKmG,IAAMA,EACXnG,KAAKqG,aAAe,EACpBrG,KAAKsG,YAAcF,EAEnBpG,KAAKuG,cAAe,EACpBvG,KAAKwG,WAAY,EACjBxG,KAAKyG,cAAgB,MACtB,CAED,yBAAAC,CAA0BC,EAAQC,GAEhCD,EAASpB,GAAWI,UAAUgB,GAAUA,EAAS,EACjDC,EAASrB,GAAWI,UAAUiB,GAAUA,EAAS,EAEjD5G,KAAKqG,aAAeM,EAEhBC,EAAQ,IAEV5G,KAAKsG,YAAcM,GAGjB5G,KAAKqG,aAAerG,KAAKsG,aAE3BO,QAAQC,KAAK,8EAA+E9G,KAAKmG,IAEpG,CAED,eAAAY,GAEE/G,KAAKuG,cAAe,CACrB,CAED,WAAAS,CAAYC,GAEVjH,KAAKwG,WAAY,EACjBxG,KAAKyG,cAAgBQ,CACtB,CAED,WAAAC,GAEEL,QAAQM,MAAM,uBAAyBnH,KAAKkG,YAAc,cAAgBlG,KAAKmG,IAAM,SAAWnG,KAAKyG,cACtG,CAED,IAAAW,CAAKC,GAEH,QAAsDnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAC7C,CACE,MAAMoB,EAAQC,GAAQxD,UAAY,WAAa,UAE/CyD,MAAMzH,KAAKmG,IAAK,CACduB,OAAQ,MACRC,KAAM,OACNJ,MAAOA,EACPK,YAAa,cACbC,SAAU,WAETC,KAAK9H,KAAK+H,YAAYC,KAAKhI,KAAMqH,IACjCY,MAAMjI,KAAKkI,WAAWF,KAAKhI,MAC/B,MAGCqH,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAER,CAED,iBAAMgB,CAAYV,EAAoBe,GAEpC,MAAMC,EAAiBD,EAASE,QAC1BC,EAASH,EAASI,KAAKC,YAGvBC,GAAiBN,EAASO,QAAQC,IAAI,kBAG5C,IAAIC,EAAiB,EAErB,OACA,CACE,MAAMC,KAAEA,EAAI5J,MAAEA,SAAgBqJ,EAAOQ,OAErC,GAAID,EAEF,MAGFD,GAAkB3J,EAAM8J,OAExBhJ,KAAK0G,0BAA0BmC,EAAgBH,EAEhD,CAED1I,KAAKiJ,sBAAsB5B,EAAoBgB,EAChD,CAED,qBAAAY,CAAsB5B,EAAoBe,GAEzC,CAED,UAAAF,CAAWgB,GAETrC,QAAQM,MAAM+B,EACf,ECPE,MAACC,GAAe,IAxGrB,MAEE,WAAAxK,GAEEqB,KAAKoJ,MAAQ,GACbpJ,KAAKqJ,oBAAiBnJ,EAEtBF,KAAKsJ,qBAAuB,EAC7B,CAED,UAAAC,CAAWC,EAAWC,GAAa,EAAMC,GAAO,GAE9C,MAAMC,EAAI3J,KAAK4I,IAAIY,GAEfC,IAEFzJ,KAAK4J,qBAAqBD,EAAExD,KAC5BnG,KAAK6J,uBAAuBF,EAAExD,MAGhCnG,KAAKqJ,eAAeS,KAAK,wBAAyB,CAAEC,qBAAsBP,EAAWE,QACtF,CAED,WAAAM,CAAYC,EAAYR,GAAa,EAAOC,GAAO,GAEjD,MAAMQ,EAAkBlK,KAAK4I,IAAI,cAEjCsB,EAAgBC,mBAAmBF,GAEnCjK,KAAKuJ,WAAWW,EAAgBnG,KAAM0F,EAAYC,EACnD,CAED,wBAAAU,CAAyBC,GAEvBrK,KAAKsJ,qBAAuBe,CAC7B,CAED,GAAAzB,CAAIY,GAEF,IAAK,IAAIc,EAAI,EAAGA,EAAItK,KAAKoJ,MAAMJ,OAAQsB,IAErC,GAAItK,KAAKoJ,MAAMkB,GAAGvG,OAASyF,EAEzB,OAAOxJ,KAAKoJ,MAAMkB,GAGtBzD,QAAQM,MAAM,wCAAyCqC,EAExD,CAED,UAAAe,CAAWpE,GAET,IAAK,IAAImE,EAAI,EAAGA,EAAItK,KAAKoJ,MAAMJ,OAAQsB,IAErC,GAAItK,KAAKoJ,MAAMkB,GAAGnE,MAAQA,EAExB,OAAOnG,KAAKoJ,MAAMkB,GAGtBzD,QAAQM,MAAM,+CAAgDhB,EAE/D,CAED,aAAAqE,CAAcC,GAEZzK,KAAKoJ,MAAMsB,KAAKD,EACjB,CAED,kBAAAE,CAAmBtB,GAEjBrJ,KAAKqJ,eAAiBA,CACvB,CAED,oBAAAO,CAAqBzD,GAEnByE,OAAOC,QAAQC,UAAU,GAAI,GAAI3E,EAClC,CAED,sBAAA0D,CAAuB9F,GAErB,MAAMgH,EAAQ/K,KAAKgL,aAAajH,GAEhCkH,SAASF,MAAQA,EAAQ,GAAGA,OAAW/K,KAAKsJ,uBAAyBtJ,KAAKsJ,oBAC3E,CAED,YAAA0B,CAAaE,GAEX,IAAIC,EAAaD,EAAOE,cAAcnG,QAAQ,IAAK,IAGnD,OAFAkG,EAAanL,KAAKqL,sBAAsBF,GAEjCA,CACR,CAED,qBAAAE,CAAsBH,GAEpB,OAAOA,EAAOjG,QACZ,gBACCqG,GAAUA,EACRrG,QAAQ,IAAK,KACbA,QAAQ,IAAK,MAEnB,GCtGH,MAAMsG,GAEJ,WAAA5M,CAAYoF,GAEV/D,KAAK+D,KAAOA,CACb,CAED,KAAAyH,GAEC,CAED,IAAAC,GAEC,CAED,IAAAC,GAEC,CAED,YAAAC,GAEC,CAED,QAAA3N,GAEC,CAED,aAAAE,GAEC,CAED,MAAAC,GAEC,CAED,YAAAC,GAEC,CAED,uBAAAwN,CAAwBC,EAAkBC,EAAqBC,GAE9D,CAED,sBAAAC,CAAuBH,EAAkBC,EAAqBC,GAE7D,CAED,WAAAE,GAEC,CAED,OAAAhO,GAEC,EClDH,MAAMiO,WAAwBX,GAE5B,WAAA5M,EAAYoF,KAAEA,EAAIoC,IAAEA,EAAGgG,UAAEA,IAEvBpN,MAAMgF,GAEN/D,KAAKmM,UAAYA,EACjBnM,KAAKmG,IAAMA,EAEXiG,GAAY5B,cAAcxK,KAC3B,CAED,IAAAyL,GAEEzL,KAAKmM,UAAUE,UAAUC,IAAI,gBAC7BtM,KAAKmM,UAAUE,UAAUE,OAAO,eAChCvM,KAAKmM,UAAUE,UAAUE,OAAO,SACjC,CAED,QAAAvO,GAEEgC,KAAKmM,UAAUE,UAAUE,OAAO,gBAChCvM,KAAKmM,UAAUE,UAAUE,OAAO,eAChCvM,KAAKmM,UAAUE,UAAUE,OAAO,SACjC,CAED,WAAAN,GAEEjM,KAAKmM,UAAUE,UAAUC,IAAI,eAC7BtM,KAAKmM,UAAUE,UAAUE,OAAO,gBAChCvM,KAAKmM,UAAUE,UAAUE,OAAO,SACjC,CAED,IAAAb,GAEE1L,KAAKmM,UAAUE,UAAUC,IAAI,UAC7BtM,KAAKmM,UAAUE,UAAUE,OAAO,gBAChCvM,KAAKmM,UAAUE,UAAUE,OAAO,cACjC,CAED,WAAAC,CAAYC,GAEVzM,KAAKmM,UAAUO,MAAMD,QAAUA,CAChC,EC7CH,MAAME,GAEJ,WAAAhO,CAAYoF,EAAM2D,EAAQkF,GAExB5M,KAAK+D,KAAOA,EACZ/D,KAAK0H,OAASA,EACd1H,KAAK4M,KAAOA,CACb,CAED,OAAAC,GAEEC,QAAQC,YAAY/M,KAAK+D,MAAM/D,KAAK0H,WAAW1H,KAAK4M,KAAKtH,MAAM,KAChE,ECbH,MAAM0H,GAEJ,WAAArO,GACE,CAEF,iBAAOsO,CAAW/N,EAChBgO,EACAC,EACAC,EACAC,GAEA,OAASnO,EAAQgO,IAA2BC,EAAuBD,IAA4BG,EAAqBD,GAAwBA,CAC7I,CAED,cAAOE,CAAQpO,EAAOqO,EAAKC,GAEzB,OAAQtO,GAASqO,GAAOrO,GAASsO,CAClC,CAED,UAAOC,CAAIC,EAAQC,GAEjB,OAASD,EAASC,EAAWA,GAAWA,CACzC,CAED,iBAAOC,CAAWC,GAmBhB,OAjBAA,EAAIC,EAAIC,KAAKC,MAAc,IAARH,EAAIC,GAASG,SAAS,IACzCJ,EAAIK,EAAIH,KAAKC,MAAc,IAARH,EAAIK,GAASD,SAAS,IACzCJ,EAAIM,EAAIJ,KAAKC,MAAc,IAARH,EAAIM,GAASF,SAAS,IAEpB,IAAjBJ,EAAIC,EAAE9E,SAER6E,EAAIC,EAAI,IAAMD,EAAIC,GAEC,IAAjBD,EAAIK,EAAElF,SAER6E,EAAIK,EAAI,IAAML,EAAIK,GAEC,IAAjBL,EAAIM,EAAEnF,SAER6E,EAAIM,EAAI,IAAMN,EAAIM,GAGb,IAAMN,EAAIC,EAAID,EAAIK,EAAIL,EAAIM,CAClC,CAED,8BAAOC,CAAwBC,EAAQC,GAErC,MAAMC,EAAkBF,EAAO,GAAG/F,QAClCiG,EAAgBpM,IAAI,EAAG,EAAG,GAE1B,MAAMqM,EAAkB,GACxB,IAAK,IAAIlE,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IAEjCgE,EAAMG,aAAaJ,EAAO/D,GAAIiE,GAC9BC,EAAgB9D,KAAK6D,EAAgBjG,SAGvC,OAAOkG,CACR,CAED,mBAAOE,CAAaC,EAAMC,EAAIC,EAAQC,GAEpC,IAAK,IAAIxE,EAAI,EAAGA,EAAI,GAAIA,IAEtBuE,EAAOE,SAASzE,GAAKtK,KAAKgP,KAAKL,EAAKI,SAASzE,GAAIsE,EAAGG,SAASzE,GAAIwE,EAEpE,CAED,aAAOG,CAAOC,EAAIC,GAEhB,OAAOpB,KAAKqB,IAAIF,EAAKC,GAAM,IAC5B,CAED,WAAOH,CAAKK,EAAGC,EAAGR,GAEhB,OAAQ,EAAIA,GAAKO,EAAIP,EAAIQ,CAC1B,CAED,YAAOC,CAAMrQ,EAAOqO,EAAKC,GAEvB,OAAOO,KAAKP,IAAID,EAAKQ,KAAKR,IAAIC,EAAKtO,GACpC,CAED,sBAAOsQ,CAAgB/J,EAAGgK,GAExB,OAAShK,EAAIgK,EAAKA,GAAKA,CACxB,CAED,eAAOC,CAASL,EAAGrG,EAAS,GAE1B,OAAOA,EAAS+E,KAAKqB,IAAIpC,GAAMwC,gBAAgBH,EAAY,EAATrG,GAAcA,EACjE,CAED,eAAO2G,CAASC,GAEd,OAAOA,GAAW7B,KAAK8B,GAAK,IAC7B,CAED,eAAOC,CAASC,GAEd,OAAOA,GAAW,IAAMhC,KAAK8B,GAC9B,CAED,iBAAOG,CAAWJ,GAEhB,OAAOA,GAAW7B,KAAK8B,GAAK,IAC7B,CAED,iBAAOI,CAAWF,GAEhB,OAAOA,GAAW,IAAMhC,KAAK8B,GAC9B,CAED,yBAAOK,CAAmBvG,GAKxB,OAHAA,EAAE0F,GAAK1F,EAAEwG,EACTxG,EAAE2F,GAAK3F,EAAEwG,EACTxG,EAAEyG,GAAKzG,EAAEwG,EACFxG,CACR,CAED,qBAAO0G,CAAehC,GAEpB,MAAMiC,EAASjC,EAAO,GAAG/F,QACzB,IAAK,IAAIgC,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IAEjCgG,EAAOhE,IAAI+B,EAAO/D,IAGpB,OADAgG,EAAOC,eAAe,EAAIlC,EAAOrF,QAC1BsH,CACR,CAED,uBAAOE,GAEL,MAAMC,EAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,KAEpE,IAAIC,EAAM,IASV,OARAA,GAAOD,EAAI1C,KAAK4C,MAAsB,GAAhB5C,KAAK6C,WAC3BF,GAAOD,EAAI1C,KAAK4C,MAAsB,GAAhB5C,KAAK6C,WAE3BF,GAAOD,EAAI1C,KAAK4C,MAAsB,GAAhB5C,KAAK6C,WAC3BF,GAAOD,EAAI1C,KAAK4C,MAAsB,GAAhB5C,KAAK6C,WAE3BF,GAAOD,EAAI1C,KAAK4C,MAAsB,GAAhB5C,KAAK6C,WAC3BF,GAAOD,EAAI1C,KAAK4C,MAAsB,GAAhB5C,KAAK6C,WACpBF,CACR,CAED,eAAOG,CAASxB,GAEd,OAAOrC,GAAMuC,MAAMF,EAAG,EAAG,EAC1B,ECrJH,MAAMyB,GAEJ,WAAAnS,CAAY+D,EAAU,CAAA,EAAIqO,GAExB/Q,KAAKgR,uBAAyB,KAC9BhR,KAAKiR,cAAgB,KACrBjR,KAAKkR,eAAiBlR,KAAKmR,qBAAqBJ,GAChD/Q,KAAKoR,SAAU,EAEfpR,KAAKqR,cAAgB,GACrBrR,KAAK0C,QAAUA,EAEf1C,KAAKsR,gBAAkBxL,KAAKC,MAAMD,KAAKyL,UAAU7O,IAEjD1C,KAAKwR,MAAQ,EAEbxR,KAAKyR,SAAW,GAEhB,MAAMC,EAAgBC,OAAOC,KAAKlP,GAClC,IAAK,IAAI4H,EAAI,EAAGA,EAAIoH,EAAc1I,OAAQsB,IAExCtK,KAAKyR,SAASC,EAAcpH,IAAM,GAGpCtK,KAAK6R,SAAW,CACjB,CAED,IAAAC,GAEE9R,KAAKoR,SAAU,CAChB,CAED,IAAAW,GAEE/R,KAAKoR,SAAU,CAChB,CAED,KAAAY,GAEEhS,KAAKiR,cAAgB,IACtB,CAED,IAAAvH,GAEE,MAAMmI,EAAW7R,KAAKiS,eACtBjS,KAAKkS,aAAalS,KAAKiR,aAAcY,EAAW,MAChD7R,KAAKiR,aAAeY,CACrB,CAED,MAAA1T,CAAOgU,GAEDnS,KAAKoR,UAEPpR,KAAKgR,sBAAwBhR,KAAKiR,aAClCjR,KAAKiR,cAAgBkB,EAAanS,KAAKkR,eACvClR,KAAKkS,aAAalS,KAAKgR,sBAAuBhR,KAAKiR,cAEtD,CAED,YAAAmB,CAAaC,GAEXrS,KAAKgR,sBAAwBhR,KAAKiR,aAClCjR,KAAKiR,aAAejE,GAAMuC,MAAM8C,EAAM,EAAGrS,KAAK6R,UAC9C7R,KAAKkS,aAAalS,KAAKiR,aAAcjR,KAAKiR,aAC3C,CAED,uBAAAqB,CAAwBxD,GAEtB9O,KAAKgR,sBAAwBhR,KAAKiR,aAClCjR,KAAKiR,aAAejE,GAAMuC,MAAMT,EAAG,EAAG,GAAK9O,KAAK6R,SAChD7R,KAAKkS,aAAalS,KAAKiR,aAAcjR,KAAKiR,aAC3C,CAED,YAAAsB,GAEE,OAAOvF,GAAMuC,MAAMvP,KAAKiR,aAAejR,KAAKiS,eAAgB,EAAG,EAChE,CAED,WAAAO,GAEE,OAAOxS,KAAKiR,aAAejR,KAAKiS,cACjC,CAED,gBAAAQ,CAAiBC,EAAcC,GAE7B3S,KAAKqR,cAAc3G,KAAK,CACtBgI,aAAcA,EACdC,OAAQA,IAGV3S,KAAK6R,SAAW9D,KAAKP,IAAIxN,KAAK6R,SAAUa,EACzC,CAED,uBAAAE,CAAwBjE,EAAMC,EAAIiE,EAAcC,GAAyB,GAEvE,GAAIA,EACJ,CACE,MAAMC,EAAY/S,KAAKyR,SAASoB,EAAaG,qBAE3B9S,IAAd6S,GAEFlM,QAAQM,MAAM,GAAG0L,EAAaG,iDAGP,IAArBD,EAAU/J,OAEZ6J,EAAalE,KAAO3O,KAAKsR,gBAAgBuB,EAAaG,gBAItDH,EAAalE,KAAOoE,EAAUA,EAAU/J,OAAS,GAAG6J,aAAajE,EAEpE,CAED,MAAMqE,EAAW,CACftE,KAAMA,EACNC,GAAIA,EACJiE,aAAcA,GAGhB7S,KAAK6R,SAAW9D,KAAKP,IAAIxN,KAAK6R,SAAUjD,GACxC5O,KAAKyR,SAASoB,EAAaG,gBAAgBtI,KAAKuI,EACjD,CAED,wBAAAC,CAAyBnP,GAEvB,MAAMkP,EAAWjT,KAAKmT,uBAAuBpP,EAAM/D,KAAKiR,cAExD,OAAIjR,KAAKiR,aAAegC,EAAStE,KAExBsE,EAASJ,aAAaO,SAAS,GAGjCH,EAASJ,aAAaO,SAAS,EACvC,CAED,0BAAAC,CAA2BtP,GAIzB,OAFiB/D,KAAKmT,uBAAuBpP,EAAM/D,KAAKiR,cAExC4B,aAAaO,SAAS,EACvC,CAED,oBAAAE,CAAqBvP,GAEnB,MAAMkP,EAAWjT,KAAKmT,uBAAuBpP,EAAM/D,KAAKiR,cAClDnC,EAAI9O,KAAKuT,gBAAgBvT,KAAKiR,aAAcgC,EAAStE,KAAMsE,EAASrE,IAE1E,OAAOqE,EAASJ,aAAaW,gBAAgB1E,EAC9C,CAED,YAAAmD,GAEE,OAAOjS,KAAK6R,QACb,CAED,YAAAK,CAAavD,EAAMC,GAEb5O,KAAKiR,aAAejR,KAAKgR,uBAE3BhR,KAAKyT,cAAczT,KAAKgR,sBAAuBhR,KAAKiR,cAEtD,MAAMS,EAAgBC,OAAOC,KAAK5R,KAAKsR,iBAEvC,IAAK,IAAIhH,EAAI,EAAGA,EAAIoH,EAAc1I,OAAQsB,IAC1C,CACE,MAAMvG,EAAO2N,EAAcpH,GACrB2I,EAAWjT,KAAKmT,uBAAuBpP,EAAM4K,GAEnD3O,KAAK0C,QAAQqB,GAAQ/D,KAAK0T,kBAAkBT,EAAUtE,EACvD,CACF,CAED,aAAA8E,CAAc9E,EAAMC,GAElB,IAAK,IAAItE,EAAI,EAAGA,EAAItK,KAAKqR,cAAcrI,OAAQsB,IAC/C,CACE,MAAMoI,EAAe1S,KAAKqR,cAAc/G,GAAGoI,aACvC1F,GAAMM,QAAQoF,EAAc/D,EAAMC,KAEpC/H,QAAQ8M,IAAI,eAAiB3T,KAAKqR,cAAc/G,GAAGqI,OAAOhU,YAAYoF,KAAO,OAAU/D,KAAKqR,cAAc/G,GAAGoI,cAC7G1S,KAAKqR,cAAc/G,GAAGqI,OAAO9F,UAEhC,CACF,CAED,iBAAA6G,CAAkBT,EAAUZ,GAI1B,OAFArS,KAAKwR,MAAQxR,KAAKuT,gBAAgBlB,EAAMY,EAAStE,KAAMsE,EAASrE,IAEzDqE,EAASJ,aAAaO,SAASpG,GAAMuC,MAAMvP,KAAKwR,MAAO,EAAG,GAClE,CAED,aAAAoC,CAAcC,GAEZ,OAAO7T,KAAKyR,SAASoC,EACtB,CAED,oBAAAC,CAAqBD,GAEnB,IAAK,IAAIvJ,EAAI,EAAGA,EAAItK,KAAKyR,SAASoC,GAAc7K,OAAQsB,IACxD,CAGE,GAFiBtK,KAAKyR,SAASoC,GAAcvJ,GAEhCuI,aAAakB,QAExB,OAAO,CAEV,CAED,OAAO,CACR,CAED,eAAAR,CAAgBrU,EACdgO,EACAC,GAEA,OAAOH,GAAM6D,UAAW3R,EAAQgO,IAA2BC,EAAuBD,GAAuB,EAAc,EACxH,CAED,sBAAAiG,CAAuBU,EAAcxB,GAEnC,IAAI2B,EAEJ,MAAMjB,EAAY/S,KAAKyR,SAASoC,GAEhC,IAAK,IAAIvJ,EAAI,EAAGA,EAAIyI,EAAU/J,OAAQsB,IACtC,CACE,MAAM2I,EAAWF,EAAUzI,GAE3B,GAAI+H,GAAQY,EAAStE,MAAQ0D,GAAQY,EAASrE,GAG5C,OADAoF,EAAUf,EACHe,CAEV,CAED,IAAIzG,EAAM0G,IAEV,IAAK,IAAI3J,EAAI,EAAGA,EAAIyI,EAAU/J,OAAQsB,IACtC,CACE,MAAM2I,EAAWF,EAAUzI,GACrB4J,EAAWnG,KAAKqB,IAAI6D,EAASrE,GAAKyD,GAEpC6B,EAAW3G,IAEbyG,EAAUf,EACV1F,EAAM2G,EAET,CAED,OAAOF,CACR,CAED,oBAAA7C,CAAqBJ,GAEnB,OAAIA,EAEK1L,OAAO0L,GAIP,CAEV,EC3QH,MAAMoD,GAEJ,WAAAxV,GACE,CAEF,aAAOyV,CAAO/E,GAEZ,OAAOA,CACR,CAED,iBAAOgF,CAAWhF,GAEhB,OAAO,EAAItB,KAAKqB,IAAS,EAAJC,EAAK,EAAc,EACzC,CAED,mBAAOiF,CAAajF,GAElB,OAAO,EAAItB,KAAKwG,IAAQ,UAAJlF,EAAgB,EACrC,CAED,oBAAOmF,CAAcnF,GAEnB,OAAOtB,KAAK0G,IAAQ,UAAJpF,EAAgB,EACjC,CAED,uBAAOqF,CAAiBrF,GAEtB,QAAStB,KAAKwG,IAAI,UAAYlF,GAAK,GAAK,CACzC,CAED,oBAAOsF,CAActF,GAEnB,OAAOA,EAAIA,EAAIA,CAChB,CAED,qBAAOuF,CAAevF,GAEpB,OAAO,EAAItB,KAAK8G,IAAI,EAAIxF,EAAG,EAC5B,CAED,wBAAOyF,CAAkBzF,GAEvB,OAAOA,EAAI,GACP,EAAIA,EAAIA,EAAIA,EACZ,EAAItB,KAAK8G,KAAK,EAAIxF,EAAI,EAAG,GAAK,CACnC,CAED,mBAAO0F,CAAa1F,GAElB,OAAOA,EAAIA,CACZ,CAED,oBAAO2F,CAAc3F,GAEnB,OAAO,GAAK,EAAIA,IAAM,EAAIA,EAC3B,CAED,uBAAO4F,CAAiB5F,GAEtB,OAAOA,EAAI,GACP,EAAIA,EAAIA,EACR,EAAItB,KAAK8G,KAAK,EAAIxF,EAAI,EAAG,GAAK,CACnC,CAED,oBAAO6F,CAAc7F,GAEnB,OAAOA,EAAIA,EAAIA,EAAIA,CACpB,CAED,qBAAO8F,CAAe9F,GAEpB,OAAO,EAAItB,KAAK8G,IAAI,EAAIxF,EAAG,EAC5B,CAED,wBAAO+F,CAAkB/F,GAEvB,OAAOA,EAAI,GACP,EAAIA,EAAIA,EAAIA,EAAIA,EAChB,EAAItB,KAAK8G,KAAK,EAAIxF,EAAI,EAAG,GAAK,CACnC,CAED,oBAAOgG,CAAchG,GAEnB,OAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CACxB,CAED,qBAAOiG,CAAejG,GAEpB,OAAO,EAAItB,KAAK8G,IAAI,EAAIxF,EAAG,EAC5B,CAED,wBAAOkG,CAAkBlG,GAEvB,OAAOA,EAAI,GACP,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EACrB,EAAItB,KAAK8G,KAAK,EAAIxF,EAAI,EAAG,GAAK,CACnC,CAED,mBAAOmG,CAAanG,GAElB,OAAa,IAANA,EAAU,EAAItB,KAAK8G,IAAI,EAAG,GAAKxF,EAAI,GAC3C,CAED,oBAAOoG,CAAcpG,GAEnB,OAAa,IAANA,EAAU,EAAI,EAAItB,KAAK8G,IAAI,GAAI,GAAKxF,EAC5C,CAED,uBAAOqG,CAAiBrG,GAEtB,OAAa,IAANA,EACH,EACM,IAANA,EACE,EACAA,EAAI,GACFtB,KAAK8G,IAAI,EAAG,GAAKxF,EAAI,IAAM,GAC1B,EAAItB,KAAK8G,IAAI,GAAI,GAAKxF,EAAI,KAAO,CAC3C,CAED,mBAAOsG,CAAatG,GAElB,OAAO,EAAItB,KAAK6H,KAAK,EAAI7H,KAAK8G,IAAIxF,EAAG,GACtC,CAED,oBAAOwG,CAAcxG,GAEnB,OAAOtB,KAAK6H,KAAK,EAAI7H,KAAK8G,IAAIxF,EAAI,EAAG,GACtC,CAED,uBAAOyG,CAAiBzG,GAEtB,OAAOA,EAAI,IACN,EAAItB,KAAK6H,KAAK,EAAI7H,KAAK8G,IAAI,EAAIxF,EAAG,KAAO,GACzCtB,KAAK6H,KAAK,EAAI7H,KAAK8G,KAAK,EAAIxF,EAAI,EAAG,IAAM,GAAK,CACpD,CAED,mBAAO0G,CAAa1G,GAElB,OAAO,OAASA,EAAIA,EAAIA,EAAI,OAASA,EAAIA,CAC1C,CAED,oBAAO2G,CAAc3G,GAEnB,OAAO,EAAI,OAAStB,KAAK8G,IAAIxF,EAAI,EAAG,GAAK,OAAStB,KAAK8G,IAAIxF,EAAI,EAAG,EACnE,CAED,uBAAO4G,CAAiB5G,GAEtB,OAAOA,EAAI,GACNtB,KAAK8G,IAAI,EAAIxF,EAAG,IAAM,SAAsBA,EAAI,WAAc,GAC9DtB,KAAK8G,IAAI,EAAIxF,EAAI,EAAG,IAAM,WAAuB,EAAJA,EAAQ,GAAK,WAAa,GAAK,CAClF,CAED,sBAAO6G,CAAgB7G,GAErB,MAAM8G,EAAM,EAAIpI,KAAK8B,GAAM,EAE3B,OAAa,IAANR,EACH,EACM,IAANA,EACE,GACCtB,KAAK8G,IAAI,EAAG,GAAKxF,EAAI,IAAMtB,KAAK0G,KAAS,GAAJpF,EAAS,OAAS8G,EAC/D,CAED,uBAAOC,CAAiB/G,GAEtB,OAAa,IAANA,EACH,EACM,IAANA,EACE,EACAtB,KAAK8G,IAAI,GAAI,GAAKxF,GAAKtB,KAAK0G,IAAsB,UAAb,GAAJpF,EAAS,MAAqB,CACtE,CAED,0BAAOgH,CAAoBhH,GAEzB,OAAa,IAANA,EACH,EACM,IAANA,EACE,EACAA,EAAI,IACAtB,KAAK8G,IAAI,EAAG,GAAKxF,EAAI,IAAMtB,KAAK0G,IAAwB,WAAnB,GAAKpF,EAAI,SAAwB,EACxEtB,KAAK8G,IAAI,GAAI,GAAKxF,EAAI,IAAMtB,KAAK0G,IAAwB,WAAnB,GAAKpF,EAAI,SAAuB,EAAI,CACnF,CAED,qBAAOiH,CAAejH,GAEpB,OAAO,EAAIrP,KAAKuW,gBAAgB,EAAIlH,EACrC,CAED,sBAAOkH,CAAgBlH,GAErB,MAAMmH,EAAK,OACLC,EAAK,KAEX,OAAIpH,EAAI,EAAIoH,EAEHD,EAAKnH,EAAIA,EAETA,EAAI,EAAIoH,EAERD,GAAMnH,GAAK,IAAMoH,GAAMpH,EAAI,IAE3BA,EAAI,IAAMoH,EAEVD,GAAMnH,GAAK,KAAOoH,GAAMpH,EAAI,MAI5BmH,GAAMnH,GAAK,MAAQoH,GAAMpH,EAAI,OAEvC,CAED,yBAAOqH,CAAmBrH,GAExB,OAAOA,EAAI,IACN,EAAIrP,KAAKuW,gBAAgB,EAAI,EAAIlH,IAAM,GACvC,EAAIrP,KAAKuW,gBAAgB,EAAIlH,EAAI,IAAM,CAC7C,CAED,gBAAOsH,CAAU7H,GAEf,OAAO,EAAMf,KAAK8G,IAAI9G,KAAKqB,IAAIrB,KAAK0G,IAAI3F,EAAI,IAAO,IAAQf,KAAK6I,KAAK7I,KAAK0G,IAAI3F,IAAMf,KAAK0G,IAAI3F,EAAI,IAAM,GAAO,EAC/G,EC5NH,MAAM+H,GAEJ,WAAAlY,CAAY6U,EAAkB,UAE5BxT,KAAKwT,qBAAkBtT,EAIrBF,KAAKwT,gBAFwB,iBAApBA,EAEcW,GAAgBX,GAIhBA,CAE1B,CAED,MAAArV,CAAOuE,EAASoM,GAGf,EClBH,MAAMgI,WAA2BD,GAE/B,WAAAlY,CAAYqU,EAAgBrE,EAAO,EAAGC,EAAK,EAAGmF,GAAU,EAAOP,EAAkB,UAE/EzU,MAAMyU,GAENxT,KAAKgT,eAAiBA,EACtBhT,KAAK2O,KAAOA,EACZ3O,KAAK4O,GAAKA,EACV5O,KAAK+T,QAAUA,CAChB,CAED,MAAA5V,CAAOuE,EAASoM,GAEdpM,EAAQ1C,KAAKgT,gBAAkBhG,GAAMgC,KAAKhP,KAAK2O,KAAM3O,KAAK4O,GAAI5O,KAAKwT,gBAAgB1E,GACpF,CAED,QAAAsE,CAAStE,GAEP,OAAO9B,GAAMgC,KAAKhP,KAAK2O,KAAM3O,KAAK4O,GAAI5O,KAAKwT,gBAAgB1E,GAC5D,ECvBH,MAAMiI,GAEJ,WAAApY,GAGC,CAED,KAAAoH,CAAMiR,GAEJ,MAEMC,GAFM,IAAIC,WAAYC,gBAAgBH,EAAc,YAE9BI,iBAAiB,cAEvCC,EAAmB,GACnBC,EAAW,GAEjB,IAAK,IAAIhN,EAAI,EAAGA,EAAI2M,EAAgBjO,OAAQsB,IAC5C,CACE,MAAMiN,EAAON,EAAgB3M,GACvBkN,EAAcD,EAAKE,cACnBvO,EAAOsO,EAAYE,aAAa,SAIhC/I,EAFQ3O,KAAK2X,oBAAoBJ,GAElB,IACf1F,EAAW+F,WAAWL,EAAKG,aAAa,UAAY,IAG1D,GAAIF,EAAYE,aAAa,SAAShU,SAAS,YAC/C,CACE,MAAMmU,EAAa3O,EAAK5D,MAAM,KACxBwS,EAAeD,EAAW,GAC1BE,EAAiBF,EAAW,GAElCP,EAAS5M,KAAK,CACZ3G,KAAM+T,EACNpQ,OAAQqQ,EACRC,QAASrJ,EAAkB,GAAXkD,GAEnB,CAKD,GAHsB2F,EAAYE,aAAa,SAAShU,SAAS,gBAC3C8T,EAAYE,aAAa,SAAShU,SAAS,UAEnC,KAATwF,IAAgBA,EAAKxF,SAAS,KACnD,CACE,MAAMmU,EAAa3O,EAAK5D,MAAM,KAExB0N,EAAiB6E,EAAW,GAE5BI,EAAaJ,EAAW,GAAGvS,MAAM,MACjC4S,EAAWN,WAAWK,EAAW,IACjCzE,EAAkByE,EAAW,GAET,IAAtBJ,EAAW7O,QAEbnC,QAAQM,MAAM,4BAA6B+B,GAGnB,IAAtB+O,EAAWjP,QAEbnC,QAAQM,MAAM,4BAA6B+B,GAG7CmO,EAAiB3M,KAAK,CACpBsI,eAAgBA,EAChBmF,UAAWxJ,EACXyJ,QAASzJ,EAAOkD,EAChBqG,SAAUA,EACV1E,gBAAiBA,GAEpB,CACF,CAMD,OAJA6D,EAAiBgB,MAAK,CAACC,EAAGnK,IAEjBmK,EAAEH,UAAYhK,EAAEgK,YAElB,CACLd,iBAAkBA,EAClBC,SAAUA,EAEb,CAED,mBAAAK,CAAoBJ,GAElB,MAAMgB,EAAQhB,EAAKG,aAAa,KAChC,OAAiB,OAAVa,EAAiB,EAAIX,WAAWW,EACxC,ECnFH,MAAMC,GAEJ,WAAA7Z,CAAY8Z,GAEVzY,KAAKyY,mBAAqBA,CAC3B,CAED,oBAAAC,CAAqBC,EAAgBC,EAAiBtH,EAAiBP,GAErEO,EAAkBA,GAAmBtR,KAAKyY,mBAC1C,MAAMI,EAASF,EAAetB,iBACxBC,EAAWqB,EAAerB,SAE1BwB,EAAiB9Y,KAAK+Y,gBAAgB/Y,KAAKyY,mBAAoBzY,KAAKgZ,iBAAiBL,EAAetB,mBAE1G,IAAK,IAAI/M,EAAI,EAAGA,EAAIwO,EAAe9P,OAAQsB,SAEmDpK,IAAxF2Y,EAAOrV,MAAKyV,GAAWA,EAAQjG,iBAAmB8F,EAAexO,GAAG0I,kBAEtE6F,EAAOnO,KAAKoO,EAAexO,IAI/B,MAAM4O,EAAY,IAAIpI,GAAgB8H,EAAiB7H,GAEvD,IAAK,IAAIzG,EAAI,EAAGA,EAAIuO,EAAO7P,OAAQsB,IACnC,CACE,MAAMwE,EAAI+J,EAAOvO,GACXuI,EAAe,IAAIiE,GACvBhI,EAAEkE,eACF4F,EAAgB9J,EAAEkE,gBAClBlE,EAAEoJ,SACFpJ,EAAEiF,QACFjF,EAAE0E,iBAGJ0F,EAAUtG,wBAAwB9D,EAAEqJ,UAAWrJ,EAAEsJ,QAASvF,GAAc,EACzE,CAED,IAAK,IAAIvI,EAAI,EAAGA,EAAIgN,EAAStO,OAAQsB,IACrC,CACE,MAAMwE,EAAIwI,EAAShN,GACb6O,EAAe,IAAIxM,GAAYmC,EAAE/K,KAAM+K,EAAEpH,OAAQoH,EAAElC,MACzDsM,EAAUzG,iBAAiB3D,EAAEkJ,QAASmB,EACvC,CAED,OAAOD,CACR,CAED,eAAAH,CAAgBK,EAAOC,GAErB,MAAMR,EAAS,GAETjH,EAAOD,OAAOC,KAAKwH,GAEzB,IAAK,IAAI9O,EAAI,EAAGA,EAAIsH,EAAK5I,OAAQsB,IAE/BuO,EAAOnO,KAAK,CACVsI,eAAgBpB,EAAKtH,GACrB6N,UAAW,EACXC,QAASiB,EAAe,EAAIA,EAAe,EAC3CnB,SAAUkB,EAAMxH,EAAKtH,IACrByJ,SAAS,EACTP,gBAAiB,sBAIrB,OAAOqF,CACR,CAED,YAAAS,CAAaC,EAAK7W,GAEhB,MAAM8W,GAAkB,IAAKzC,IAAwBhR,MAAMwT,GACrDV,EAASW,EAAgBnC,iBACzBC,EAAWkC,EAAgBlC,SAC3B4B,EAAY,IAAIpI,GAAgBpO,GAEtC,IAAK,IAAI4H,EAAI,EAAGA,EAAIuO,EAAO7P,OAAQsB,IACnC,CACE,MAAMwE,EAAI+J,EAAOvO,GACXuI,EAAe,IAAIiE,GACvBhI,EAAEkE,eACFtQ,EAAQoM,EAAEkE,gBACVlE,EAAEoJ,SACFpJ,EAAEiF,QACFjF,EAAE0E,iBAGJ0F,EAAUtG,wBAAwB9D,EAAEqJ,UAAWrJ,EAAEsJ,QAASvF,GAAc,EACzE,CAED,IAAK,IAAIvI,EAAI,EAAGA,EAAIgN,EAAStO,OAAQsB,IACrC,CACE,MAAMwE,EAAIwI,EAAShN,GACb6O,EAAe,IAAIxM,GAAYmC,EAAE/K,KAAM+K,EAAEpH,QAC/CwR,EAAUzG,iBAAiB3D,EAAEkJ,QAASmB,EACvC,CAED,OAAOD,CACR,CAED,gBAAAF,CAAiBH,GAEf,IAAIQ,GAAgB,EAEpB,IAAK,IAAI/O,EAAI,EAAGA,EAAIuO,EAAO7P,OAAQsB,IACnC,CACE,MAEMmP,EAFQZ,EAAOvO,GAEI8N,QAEzBiB,EAAeI,EAAaJ,EAAeI,EAAaJ,CACzD,CAED,OAAOA,CACR,ECtHH,MAAMK,GAEJ,WAAA/a,GAEEqB,KAAK2Z,YAAc,GACnB3Z,KAAKyY,mBAAqB,GAE1BzY,KAAK+Q,qBAAuB,CAC7B,CAED,GAAAnI,CAAIgR,EAAiBC,EAAejB,GAElC,IAAK,IAAItO,EAAI,EAAGA,EAAItK,KAAK2Z,YAAY3Q,OAAQsB,IAE3C,GAAItK,KAAK2Z,YAAYrP,GAAGqE,OAASiL,GAAmB5Z,KAAK2Z,YAAYrP,GAAGsE,KAAOiL,EAC/E,CAEE,OADyB,IAAIrB,GAAuBxY,KAAKyY,oBAAoBC,qBAAqB1Y,KAAK2Z,YAAYrP,GAAGpB,KAAM0P,EAAiB5Y,KAAK+Q,qBAEnJ,CAGH,IAAK,IAAIzG,EAAI,EAAGA,EAAItK,KAAK2Z,YAAY3Q,OAAQsB,IAE3C,GAAItK,KAAK2Z,YAAYrP,GAAGsE,KAAOiL,QAA8C3Z,IAA7BF,KAAK2Z,YAAYrP,GAAGqE,KACpE,CAEE,OADyB,IAAI6J,GAAuBxY,KAAKyY,oBAAoBC,qBAAqB1Y,KAAK2Z,YAAYrP,GAAGpB,KAAM0P,EAAiB5Y,KAAK+Q,qBAEnJ,CAGHlK,QAAQM,MAAM,0CAA2CyS,EAAiBC,EAE3E,CAED,eAAAC,CAAgBH,GAEd,IAAK,IAAIrP,EAAI,EAAGA,EAAIqP,EAAY3Q,OAAQsB,IAEtCtK,KAAK2Z,YAAYjP,KAAKiP,EAAYrP,GAErC,CAED,eAAAyP,CAAgBJ,GAEd3Z,KAAK2Z,YAAcA,CACpB,CAED,sBAAAK,CAAuBvB,GAErBzY,KAAKyY,mBAAqBA,CAC3B,CAED,wBAAAwB,CAAyBlJ,GAEvB/Q,KAAK+Q,qBAAuBA,CAC7B,ECmCE,MAACsB,GAAO,IAzFb,MAEE,WAAA1T,GAEEqB,KAAKka,eAAiB,CAAC,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KACvF,CAED,IAAApX,GAEE9C,KAAKma,QAAU,IAAIC,EACnBpa,KAAKqa,aAAe,EACpBra,KAAKsa,oBAAsB,EAC3Bta,KAAKua,eAAiB,EACtBva,KAAKwa,iBAAmB,IAAIpb,EAAQ,EAAG,GACvCY,KAAKya,wBAA0B,EAC/Bza,KAAK0a,iBAAmB,EAAI,EAC7B,CAED,gBAAIzJ,GAEF,OAAOjR,KAAKua,cACb,CAED,cAAIpI,GAEF,OAAOnS,KAAKqa,YACb,CAED,qBAAIM,GAEF,OAAO3a,KAAKsa,mBACb,CAED,eAAIM,GAIF,OAFA5a,KAAKwa,iBAAiBnL,EAAIrP,KAAKmS,WAC/BnS,KAAKwa,iBAAiBlL,EAAItP,KAAKiR,aACvBjR,KAAKwa,gBACd,CAED,uBAAIK,GAEF,OAAO7a,KAAKya,uBACb,CAED,OAAIK,GAEF,OAAO9a,KAAK0a,gBACb,CAED,MAAIK,GAEF,OAAO/a,KAAKmS,UACb,CAED,OAAI6I,GAEF,OAAOhb,KAAK2a,iBACb,CAED,yBAAAM,CAA0B/b,GAExBc,KAAKya,wBAA0Bvb,CAChC,CAED,QAAAgc,GAEElb,KAAKqa,aAAera,KAAKma,QAAQgB,WACjCnb,KAAKua,eAAiBva,KAAKma,QAAQiB,iBAEnCpb,KAAKka,eAAemB,QACpBrb,KAAKka,eAAexP,KAAK1K,KAAKmS,WAAa,IAAOnS,KAAKmS,WAAa,MAEpEnS,KAAKsb,+BACN,CAED,6BAAAA,GAEEtb,KAAKsa,oBAAsB,EAE3B,IAAK,IAAIhQ,EAAI,EAAGA,EAAItK,KAAKka,eAAelR,OAAQsB,IAE9CtK,KAAKsa,qBAAuBta,KAAKka,eAAe5P,GAGlDtK,KAAKsa,oBAAsBta,KAAKsa,oBAAsBta,KAAKka,eAAelR,MAC3E,GCtFH,MAAMuS,GAEJ,WAAA5c,CAAY6c,GAEVxb,KAAKyb,WAAa,IAAIlQ,GACtBvL,KAAK0b,cAAgB,IAAInQ,GAEzBvL,KAAKyY,mBAAqB,GAC1BzY,KAAK2b,mBAAqB,GAE1B3b,KAAKwb,iBAAmBA,EAExBxb,KAAK4b,eAAgB,CACtB,CAED,WAAAC,CAAYzC,EAAO1P,GAAO,GAEpB1J,KAAK4b,eAEP5b,KAAK8b,oBAGP9b,KAAKyb,WAAazb,KAAK0b,cACvB1b,KAAK0b,cAAgBtC,EAErBpZ,KAAKyb,WAAWxP,cAChBjM,KAAK0b,cAAcjQ,OAEnBzL,KAAK+L,iBAAmB/L,KAAKwb,iBAAiB5S,IAAI5I,KAAKyb,WAAW1X,KAAM/D,KAAK0b,cAAc3X,KAAM/D,KAAK2b,oBACtG3b,KAAK0b,cAAc/P,eAEnB3L,KAAK+L,iBAAiB+F,OAEtB9R,KAAK4b,eAAgB,EAEjBlS,IAEF1J,KAAK+L,iBAAiBrC,OACtB1J,KAAK7B,SAER,CAED,MAAAA,GAEM6B,KAAK4b,eAEP5b,KAAK+b,uBAED/b,KAAK+L,iBAAiByG,gBAExBxS,KAAK4b,eAAgB,EAErB5b,KAAK+b,uBAEL/b,KAAK8b,oBAEL9b,KAAK0b,cAAc1d,aAKrBgC,KAAK0b,cAAcvd,QAEtB,CAED,aAAAD,GAEE8B,KAAK0b,cAAcxd,eACpB,CAED,YAAAE,GAEE4B,KAAK0b,cAActd,cACpB,CAED,SAAA4d,CAAU5C,GAERpZ,KAAK0b,cAAgBtC,CACtB,CAED,sBAAAY,CAAuBvB,GAErB9G,OAAOsK,OAAOjc,KAAKyY,mBAAoBA,GACvC9G,OAAOsK,OAAOjc,KAAK2b,mBAAoBlD,EACxC,CAED,oBAAAsD,GAEE/b,KAAK+L,iBAAiB5N,OAAO+d,GAAK/J,YAClCnS,KAAKyb,WAAWzP,uBAAuBhM,KAAK2b,mBAAoB3b,KAAK+L,iBAAiBwG,eAAgBvS,KAAK+L,kBAC3G/L,KAAK0b,cAAc9P,wBAAwB5L,KAAK2b,mBAAoB3b,KAAK+L,iBAAiBwG,eAAgBvS,KAAK+L,iBAChH,CAED,iBAAA+P,GAEM9b,KAAKyb,WAAW1X,OAAS/D,KAAK0b,cAAc3X,MAE9C/D,KAAKyb,WAAW/P,OAGlB1L,KAAKyb,WAAWxd,SACjB,EC9CE,MAACke,GAAqB,IAvD3B,MAEE,WAAAxd,GAEEqB,KAAKwb,iBAAmB,IAAI9B,GAC5B1Z,KAAKoc,mBAAqB,IAAIb,GAA2Bvb,KAAKwb,iBAC/D,CAED,oBAAIzP,GAEF,OAAO/L,KAAKoc,mBAAmBrQ,gBAChC,CAED,sBAAI4P,GAEF,OAAO3b,KAAKoc,mBAAmBT,kBAChC,CAED,aAAAzd,GAEE8B,KAAKoc,mBAAmBle,eACzB,CAED,MAAAC,GAEE6B,KAAKoc,mBAAmBje,QACzB,CAED,YAAAC,GAEE4B,KAAKoc,mBAAmBhe,cACzB,CAED,eAAA0b,CAAgBH,GAEd3Z,KAAKwb,iBAAiB1B,gBAAgBH,EACvC,CAED,eAAAI,CAAgBJ,GAEd3Z,KAAKwb,iBAAiBzB,gBAAgBJ,EACvC,CAED,sBAAAK,CAAuBvB,GAErBzY,KAAKwb,iBAAiBxB,uBAAuBvB,GAC7CzY,KAAKoc,mBAAmBpC,uBAAuBvB,EAChD,CAED,wBAAAwB,CAAyBlJ,GAEvB/Q,KAAKwb,iBAAiBvB,yBAAyBlJ,EAChD,GCrDH,MAAMsL,GAEJ,WAAA1d,GAEEqB,KAAKsc,iBAAmB,EACzB,CAED,qBAAAC,CAAsBxS,EAAsBL,GAAO,GAEjD,MAAMC,EAAI3J,KAAK4I,IAAImB,GACnByS,GAAkBJ,mBAAmBP,YAAYlS,EAAGD,EACrD,CAED,MAAAvL,GAEE6B,KAAKyc,kCACN,CAED,wBAAAC,CAAyBC,GAEvB3c,KAAKsc,iBAAiB5R,KAAKiS,EAC5B,CAED,mBAAAC,CAAoB7S,GAElB,MAAM4S,EAAkB3c,KAAK4I,IAAImB,GAEjCyS,GAAkBJ,mBAAmBJ,UAAUW,EAChD,CAED,2BAAAE,GAEE,OAAOL,GAAkBJ,mBAAmBV,aAC7C,CAED,GAAA9S,CAAImB,GAEF,IAAK,IAAIO,EAAI,EAAGA,EAAItK,KAAKsc,iBAAiBtT,OAAQsB,IAEhD,GAAItK,KAAKsc,iBAAiBhS,GAAGvG,OAASgG,EAEpC,OAAO/J,KAAKsc,iBAAiBhS,GAGjCzD,QAAQM,MAAM,6DAA8D4C,EAE7E,CAeD,gCAAA0S,GAEE,IAAK,IAAInS,EAAI,EAAGA,EAAItK,KAAKsc,iBAAiBtT,OAAQsB,IAEhDtK,KAAKsc,iBAAiBhS,GAAGkC,YAAYgQ,GAAkBJ,mBAAmBT,mBAE7E,CAED,YAAA3Q,CAAaE,GAEX,IAAIC,EAAaD,EAAOE,cAAcnG,QAAQ,IAAK,IAGnD,OAFAkG,EAAanL,KAAKqL,sBAAsBF,GAEjCA,CACR,CAED,qBAAAE,CAAsBH,GAEpB,OAAOA,EAAOjG,QACZ,gBACCqG,GAAUA,EACRrG,QAAQ,IAAK,KACbA,QAAQ,IAAK,MAEnB,EChFE,MAAC6X,GAAc,IAJpB,cAAwBT,KCoBnB,MAACU,GAAiB,IAtBvB,MAEE,WAAApe,GAGEqB,KAAKgd,QAAU,GACfhd,KAAK4M,KAAO,EACb,CAED,IAAAlC,CAAKhD,EAAQkF,EAAO,IAElB5M,KAAKgd,QAAQtS,KAAKhD,GAClB1H,KAAK4M,KAAKlC,KAAKkC,EAChB,CAED,KAAAqQ,GAEEjd,KAAKgd,QAAU,GACfhd,KAAK4M,KAAO,EACb,GCfH,MAAMsQ,WAAkC3R,GAEtC,WAAA5M,EAAYoF,KAAEA,EAAIoC,IAAEA,EAAGqT,gBAAEA,IAEvBza,MAAMgF,GAEN/D,KAAKmG,IAAMA,EAOX,MAAMwT,EAAc,CAClB,CACE/K,GAAI7K,EACJmF,KARJsQ,EAAkBA,GAAmB,CACnCnC,iBAAkB,GAClBC,SAAU,MAUZtX,KAAKmd,gBAAkB,EAEvBC,GAAUV,yBAAyB1c,MACnCwc,GAAkB1C,gBAAgBH,EACnC,CAED,IAAAlO,GAEE4R,GAAa3S,KAAK,GAAG1K,KAAK+D,iBAC3B,CAED,YAAA4H,GAEE0R,GAAa3S,KAAK,GAAG1K,KAAK+D,yBAC3B,CAED,QAAA/F,GAEEqf,GAAa3S,KAAK,GAAG1K,KAAK+D,qBAC3B,CAED,WAAAkI,GAEEoR,GAAa3S,KAAK,GAAG1K,KAAK+D,wBAC3B,CAED,OAAA9F,GAEEof,GAAa3S,KAAK,GAAG1K,KAAK+D,oBAC3B,CAED,IAAA2H,GAEE2R,GAAa3S,KAAK,GAAG1K,KAAK+D,iBAC3B,CAED,MAAA5F,GAEEkf,GAAa3S,KAAK,GAAG1K,KAAK+D,mBAC3B,CAED,YAAA3F,GAGC,CAED,uBAAAwN,CAAwBC,EAAkBC,EAAqBC,GAE7DsR,GAAa3S,KAAK,GAAG1K,KAAK+D,oCAAqC,CAAC8H,EAAkBC,GACnF,CAED,sBAAAE,CAAuBH,EAAkBC,EAAqBC,GAE5DsR,GAAa3S,KAAK,GAAG1K,KAAK+D,mCAAoC,CAAC8H,EAAkBC,GAClF,CAED,WAAAU,CAAYmP,GAEV,MAAMlP,EAAUkP,EAAmB,GAAG3b,KAAK+D,iBAEvC/D,KAAKmd,gBAAkB1Q,GAAWzM,KAAKmd,gBAAkB1Q,KAE3DzM,KAAKmd,gBAAkB1Q,EAEvB4Q,GAAa3S,KAAK,GAAG1K,KAAK+D,wBAAyB,CAAC0I,IAEvD,EC7DE,MAAC6Q,GAAiB,IA9BvB,MAEE,IAAAxa,GAEE9C,KAAKud,cAAWrd,EAEhBF,KAAKwd,gBAAatd,CACnB,CAED,WAAI8T,CAAQyJ,GAEVzd,KAAKud,SAAWE,CACjB,CAED,WAAIzJ,GAEF,OAAOhU,KAAKud,QACb,CAED,aAAIG,CAAUD,GAEZzd,KAAKwd,WAAaC,CACnB,CAED,aAAIC,GAEF,OAAO1d,KAAKwd,UACb,GCrBH,MAAMG,GAEJ,WAAAhf,CAAYif,GAEV5d,KAAK4d,kBAAoBA,EACzB5d,KAAK6d,aAAe,KAEpB7d,KAAK8d,OAAS7S,SAAS8S,cAAc,UACrC/d,KAAKge,IAAMhe,KAAK8d,OAAOG,WAAW,KACnC,CAED,aAAAC,CAAcC,EAAY,SAExB,GAAyB,MAArBne,KAAK6d,cAAwB7d,KAAK4d,kBACtC,CACE,MAAMpV,EAAOyC,SAASmT,qBAAqB,QAAQ,GAC7CC,EAAQpT,SAAS8S,cAAc,OAC/BO,EAAYrT,SAASsT,eAAe,eAC1CF,EAAMG,YAAYF,GAClBD,EAAMI,aAAa,QAAS,QAAQN,oCACpC3V,EAAKgW,YAAYH,GACjBre,KAAK6d,aAAeQ,EAAMK,aAC1BlW,EAAKmW,YAAYN,EAClB,CACD,OAAOre,KAAK6d,YACb,CAED,aAAAe,CAAcC,EAAMC,EAAO,cAEzB,MAAM1Y,EAAO,IAAIhH,EAIjB,OAHAY,KAAKge,IAAIc,KAAOA,EAChB1Y,EAAKiJ,EAAItB,KAAKgR,KAAK/e,KAAKge,IAAIgB,YAAYH,GAAMI,OAC9C7Y,EAAKkJ,EAAIvB,KAAKgR,KAAK/e,KAAKke,cAAcY,IAC/B1Y,CACR,CAED,WAAA8Y,CAAYL,EAAMM,EAAa,CAAE,GAM/B,OAJAA,EAAWL,KAAOK,EAAWL,MAAQ,aACrCK,EAAWC,WAAaD,EAAWC,YAAc,UAEjDpf,KAAKqf,OAAOR,EAAMM,EAAYnf,KAAK8d,OAAQ9d,KAAKge,KACzChe,KAAK8d,MACb,CAED,eAAAwB,CAAgBT,EAAMM,GAEpB,MAAMrB,EAAS9d,KAAKkf,YAAYL,EAAMM,GAChCI,EAAiB,IAAIC,EAAc1B,EAAQ2B,EAC/CC,EACAA,EACAC,EACAA,GAIF,OAHAJ,EAAeK,iBAAkB,EACjCL,EAAeM,aAAc,EAEtBN,CACR,CAED,MAAAF,CAAOR,EAAMM,GACX,CAEF,SAAAW,CAAU9B,EAAK3O,EAAGC,EAAG2P,EAAOc,EAAQC,EAAQC,EAAMC,GAUhD,QARsB,IAAXA,IAETA,GAAS,QAEW,IAAXF,IAETA,EAAS,GAEW,iBAAXA,EAETA,EAAS,CAAEG,GAAIH,EAAQI,GAAIJ,EAAQK,GAAIL,EAAQM,GAAIN,OAGrD,CACE,MAAMO,EAAgB,CAAEJ,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,GAAI,GACjD,IAAK,MAAME,KAAQD,EAEjBP,EAAOQ,GAAQR,EAAOQ,IAASD,EAAcC,EAEhD,CACDxC,EAAIyC,YACJzC,EAAI0C,OAAOrR,EAAI2Q,EAAOG,GAAI7Q,GAC1B0O,EAAI2C,OAAOtR,EAAI4P,EAAQe,EAAOI,GAAI9Q,GAClC0O,EAAI4C,iBAAiBvR,EAAI4P,EAAO3P,EAAGD,EAAI4P,EAAO3P,EAAI0Q,EAAOI,IACzDpC,EAAI2C,OAAOtR,EAAI4P,EAAO3P,EAAIyQ,EAASC,EAAOK,IAC1CrC,EAAI4C,iBAAiBvR,EAAI4P,EAAO3P,EAAIyQ,EAAQ1Q,EAAI4P,EAAQe,EAAOK,GAAI/Q,EAAIyQ,GACvE/B,EAAI2C,OAAOtR,EAAI2Q,EAAOM,GAAIhR,EAAIyQ,GAC9B/B,EAAI4C,iBAAiBvR,EAAGC,EAAIyQ,EAAQ1Q,EAAGC,EAAIyQ,EAASC,EAAOM,IAC3DtC,EAAI2C,OAAOtR,EAAGC,EAAI0Q,EAAOG,IACzBnC,EAAI4C,iBAAiBvR,EAAGC,EAAGD,EAAI2Q,EAAOG,GAAI7Q,GAC1C0O,EAAI6C,YACAZ,GAEFjC,EAAIiC,OAEFC,GAEFlC,EAAIkC,QAEP,ECxGH,MAAMY,WAAyBnD,GAE7B,WAAAhf,GAEEI,QACAiB,KAAK+gB,YAAc,IAAI3hB,EAAQ,EAAG,EACnC,CAED,MAAAigB,CAAOR,EAAMM,EAAYrB,EAAQE,GAE/BA,EAAIc,KAAOK,EAAWL,KAEtB,MAAMkC,EAAYhhB,KAAK4e,cAAcC,EAAMM,EAAWL,MAGtDhB,EAAOmB,MAAQlR,KAAKgR,KAAKiC,EAAU3R,EAAyB,EAArBrP,KAAK+gB,YAAY1R,GACxDyO,EAAOiC,OAAShS,KAAKgR,KAAKiC,EAAU1R,EAAyB,EAArBtP,KAAK+gB,YAAYzR,GACzD0O,EAAIiD,UAAU,EAAG,EAAGnD,EAAOmB,MAAOnB,EAAOiC,QAGzC/B,EAAIkD,YAAc,EAClBlD,EAAImD,UAAYhC,EAAWC,YAAc,UACzCpB,EAAIoD,SAAS,EAAG,EAAGtD,EAAOmB,MAAOnB,EAAOiC,QACxC/B,EAAIkD,YAAc,EAElBlD,EAAIkD,YAAc,EAElBlD,EAAIc,KAAOK,EAAWL,KACtBd,EAAImD,UAAYhC,EAAWC,YAAc,UACzCpB,EAAIqD,aAAe,SAEnBrD,EAAIsD,UAAYnC,EAAWmC,WAAa,SAClB,WAAlBtD,EAAIsD,UAENtD,EAAIuD,SAAS1C,EAAMf,EAAOmB,MAAQ,EAAGnB,EAAOiC,OAAS,GAIrD/B,EAAIuD,SAAS1C,EAAM,EAAGf,EAAOiC,OAAS,EAEzC,ECnCE,MAACyB,GAAe,IAVrB,MAEE,IAAA1e,GAEE9C,KAAKyhB,eAAiB,EACtBzhB,KAAK0hB,kCAAmC,EACxC1hB,KAAK2hB,uBAAwB,CAC9B,GCCH,MAAMC,WAAmBC,EAEvB,WAAAljB,CAAYmjB,EAAQ,GAElB/iB,QAEA,MAAMgjB,EAAc,GACpBA,EAAYrX,KAAK,IAAIsX,EAAQ,EAAG,EAAG,IACnCD,EAAYrX,KAAK,IAAIsX,EAAQ,EAAG,EAAG,MAEnC,MAAMC,EAAgB,IAAIC,EAAkB,CAAEC,MAAO,QAAUviB,UAAWC,IACpEuiB,GAAgB,IAAIC,GAAiBC,cAAcP,GACnDQ,EAAiB,IAAIC,EAAKJ,EAAeH,GAC/CM,EAAeE,YAAc,IAE7B,MAAMC,EAAe,GACrBA,EAAahY,KAAK,IAAIsX,EAAQ,EAAG,EAAG,IACpCU,EAAahY,KAAK,IAAIsX,EAAQ,EAAG,IAAM,IAEvC,MAAMW,EAAiB,IAAIT,EAAkB,CAAEC,MAAO,QAAUviB,UAAWC,IACrE+iB,GAAiB,IAAIP,GAAiBC,cAAcI,GACpDG,EAAkB,IAAIL,EAAKI,EAAgBD,GACjDE,EAAgBJ,YAAc,IAE9B,MAAMK,EAAa,GACnBA,EAAWpY,KAAK,IAAIsX,EAAQ,EAAG,EAAG,IAClCc,EAAWpY,KAAK,IAAIsX,EAAQ,IAAM,EAAG,IAErC,MAAMe,EAAe,IAAIb,EAAkB,CAAEC,MAAO,SAAUviB,UAAWC,IACnEmjB,GAAe,IAAIX,GAAiBC,cAAcQ,GAClDG,EAAgB,IAAIT,EAAKQ,EAAcD,GAC7CE,EAAcR,YAAc,IAE5BziB,KAAKyiB,YAAc,IAEnBziB,KAAKsM,IAAIiW,GACTviB,KAAKsM,IAAIuW,GACT7iB,KAAKsM,IAAI2W,GAETjjB,KAAK8hB,MAAM3f,IAAI2f,EAAOA,EAAOA,EAC9B,CAED,MAAA3jB,GAEC,CAED,OAAAK,GAEC,ECbE,MAAC0kB,GAAgB,IAzCtB,MAEE,IAAApgB,GAEE9C,KAAKud,SAAW,IAAI4F,EACpBnjB,KAAKud,SAASxZ,KAAO,eACtB,CAED,SAAAqf,CAAUrf,GAGT,CAED,WAAIiQ,GAEF,OAAOhU,KAAKud,QACb,CAED,WAAIvJ,CAAQqP,GAEVrjB,KAAKud,SAAW8F,CACjB,CAED,OAAA7kB,GAWE,IATAwB,KAAKgU,QAAQsP,UAASC,IAEhBA,EAAMC,WAERD,EAAMC,SAAShlB,UACf+kB,EAAME,SAASjlB,UAChB,IAGIwB,KAAKgU,QAAQ0P,SAAS1a,OAAS,GAEpChJ,KAAKgU,QAAQzH,OAAOvM,KAAKgU,QAAQ0P,SAAS,GAE7C,GCnCH,MAAMC,WAAaC,EAEjB,WAAAjlB,CAAYyH,EAAMyd,EAAU1B,GAE1B/b,EAAWA,GAAQ,IAAI4b,EAAQ,EAAG,EAAG,GACrC6B,EAAWA,GAAY,IAAI7B,EAAQ,EAAG,EAAG,GACzCG,EAAWA,GAAS,SAGpBpjB,MAFiB,IAAI+kB,EAAY1d,EAAKiJ,EAAGjJ,EAAKkJ,EAAGlJ,EAAKgK,EAAGyT,EAASxU,EAAGwU,EAASvU,EAAGuU,EAASzT,GACzE,IAAI2T,EAAkB,CAAE5B,MAAOA,IAEjD,ECbH,MAAM6B,WAAeJ,EAEnB,WAAAjlB,CAAYqhB,EAAQmC,GAElBA,EAAQA,GAAS,UAIjBpjB,MAFiB,IAAIklB,EADrBjE,EAASA,GAAU,EACyB,GAAI,IAC/B,IAAI+D,EAAkB,CAAE5B,MAAOA,IAEjD,ECPH,MAAM+B,WAAcN,EAElB,WAAAjlB,CAAYwjB,EAAOnZ,EAAQmb,GAEzBhC,EAAQA,GAAS,UAGjB,MACMiC,GAHNpb,EAASA,GAAU,GAEC,GAEdqb,EAAe,IAAIC,EAAiB,IAAM,IAAMF,EAAiB,IACvEC,EAAaE,UAAU,EAAGH,EAAkB,EAAG,GAE/C,MAAMI,EAAgB,IAAIC,EAAa,GALnB,GAKqC,IACzDD,EAAcD,UAAU,EAAGH,EAAkBM,GAAiB,GAE9D,MAAMC,EAAkBC,GAAoBC,sBAAsB,CAACR,EAAcG,IACjFG,EAAgBG,QAAQ,MAGxB/lB,MAAM4lB,EADW,IAAIZ,EAAkB,CAAE5B,MAAOA,KAG5CgC,GAEFnkB,KAAK+kB,WAAWC,mBAAmB,IAAIhD,EAAQ,EAAG,EAAG,GAAImC,GAG3DnkB,KAAKilB,KAAOd,CACb,CAED,OAAIA,CAAIA,GAENnkB,KAAK+kB,WAAWC,mBAAmB,IAAIhD,EAAQ,EAAG,EAAG,GAAImC,GACzDnkB,KAAKilB,KAAOd,CACb,CAED,OAAIA,GAEF,OAAOnkB,KAAKilB,IACb,CAED,UAAIjc,CAAO9J,GAETc,KAAK8hB,MAAM1R,EAAIlR,CAChB,CAED,UAAI8J,GAEF,OAAOhJ,KAAK8hB,MAAM1R,CACnB,ECqBE,MAAC8U,GAAU,IAvEhB,MAEE,IAAApiB,GAEE9C,KAAKif,MAAQ,EACbjf,KAAK+f,OAAS,EAEd/f,KAAKmlB,SAAW,IAAI/lB,EAEpBY,KAAKolB,aAAe,EACpBplB,KAAKqlB,cAAgB,EACrBrlB,KAAKslB,aAAe,IAAIlmB,EAAQY,KAAKif,MAAOjf,KAAK+f,QAEjD/f,KAAKulB,IAAM,EACXvlB,KAAKwlB,WAAa,IAAIpmB,EAAQ,EAAIY,KAAKif,MAAO,EAAIjf,KAAK+f,OACxD,CAED,eAAA0F,CAAgBpW,EAAGC,GAEjBtP,KAAKmlB,SAAShjB,IAAIkN,EAAGC,EACtB,CAED,MAAAnR,GAEE6B,KAAK0lB,cAAe,CACrB,CAED,WAAAC,CAAY1G,EAAOc,GAEjB/f,KAAKif,MAAQA,EACbjf,KAAK+f,OAASA,EAEd/f,KAAKwlB,WAAa,IAAIpmB,EAAQ,EAAIY,KAAKif,MAAO,EAAIjf,KAAK+f,QAEvD/f,KAAKslB,aAAajW,EAAI4P,EACtBjf,KAAKslB,aAAahW,EAAIyQ,EAEtB/f,KAAKolB,aAAenG,EAAQjf,KAAKulB,IACjCvlB,KAAKqlB,cAAgBtF,EAAS/f,KAAKulB,IAEnCvlB,KAAK0lB,cAAe,CACrB,CAED,sBAAAE,CAAuBC,GAIrB,OAFAA,EAAQtV,eAAe,EAAIvQ,KAAKulB,KAEzBM,CACR,CAED,mBAAAC,CAAoB5mB,GAElB,OAAOA,GAAS,EAAIc,KAAKulB,IAC1B,CAED,cAAAQ,GAEE,OAAO/lB,KAAKwlB,UACb,CAED,gBAAIQ,GAEF,OAAOhmB,KAAKif,MAAQjf,KAAK+f,MAC1B,CAED,YAAIkG,GAEF,OAAOjmB,KAAKif,MAAQjf,KAAK+f,MAC1B,GCpEH,MAAMmG,WAAmC7lB,GAEvC,WAAA1B,CAAY0Q,EAAGC,EAAGa,EAAGgW,GA4BnBpnB,MA1Ba,ogBAiBA,8JASK,CAChBE,SAAU,CAAEC,WAAOgB,GACnBkmB,qBAAsB,CAAElnB,MAAO,IAAIE,GACnCinB,YAAa,CAAEnnB,MAAO,IAAIE,GAC1BknB,aAAc,CAAEpnB,MAAO,IAAIE,IAE9B,CAED,YAAAmnB,CAAalX,EAAGC,GAEdtP,KAAKhB,SAASonB,qBAAqBlnB,MAAMiD,IAAIkN,EAAGC,EACjD,CAED,WAAAkX,CAAYpmB,EAAK+P,EAAGgW,GAElBnmB,KAAKhB,SAASC,SAASC,MAAQkB,EAC/BJ,KAAKhB,SAASsnB,aAAapnB,MAAMiD,IAAI/B,EAAIqmB,MAAMxH,MAAO7e,EAAIqmB,MAAM1G,aAEtD7f,IAANiQ,IAEFnQ,KAAKhB,SAASsnB,aAAapnB,MAAMmQ,EAAIc,QAE7BjQ,IAANimB,IAEFnmB,KAAKhB,SAASsnB,aAAapnB,MAAMoQ,EAAI6W,EAExC,CAED,eAAAO,CAAgBvW,EAAGgW,GAEjBnmB,KAAKhB,SAASqnB,YAAYnnB,MAAMiD,IAAIgO,EAAGgW,EACxC,EC5DH,MAAMQ,WAA0BC,EAE9B,WAAAjoB,CAAYkoB,EAAKC,EAAQC,EAAMC,GAE7BjoB,MAAM8nB,EAAKC,EAAQC,EAAMC,GAEzBhnB,KAAKinB,YAAc,IAAItmB,EAAM,WAC7BX,KAAKknB,YAAc,CACpB,CAED,IAAAC,CAAK1J,GAKH,OAHA1e,MAAMooB,KAAK1J,GACXzd,KAAKinB,YAAYE,KAAK1J,EAAOwJ,aAC7BjnB,KAAKknB,YAAczJ,EAAOyJ,YACnBlnB,IACR,ECoPE,MAAConB,GAAQ,IA1Od,MAEE,IAAAtkB,GAEE9C,KAAKqnB,YAAc,IAAIrF,EAAQ,EAAG,EAAG,GACrChiB,KAAKsnB,aAAe,IAAItF,EAAQ,EAAG,EAAG,GACtChiB,KAAKunB,qBAAkBrnB,EAEvBF,KAAKwnB,uBAAyB,GAE9BxnB,KAAKge,SAAM9d,EACXF,KAAKqjB,MAAQ,IAAIF,EACjBnjB,KAAKyd,OAAS,IAAIkJ,GAAkB,GAAIc,GAAQzB,aAAc,GAAK,KACnEhmB,KAAKyd,OAAOyJ,YAAc,CAC3B,CAED,UAAAQ,CAAWC,EAAQxD,EAAKhC,EAAQ,UAE9B,MAAMyF,EAAQ,IAAI1D,GAAM/B,EAAOgC,EAAInb,SAAUmb,EAAI7b,QAAQuf,aAGzD,OAFAD,EAAMzC,SAASgC,KAAKQ,GACpB3nB,KAAKqjB,MAAM/W,IAAIsb,GACRA,CACR,CAED,SAAAE,GAEE,MAAMC,EAAO,IAAInG,GAEjB,OADA5hB,KAAKqjB,MAAM/W,IAAIyb,GACRA,CACR,CAED,YAAAC,CAAaC,GAEXjoB,KAAKkoB,SAAWD,CACjB,CAED,cAAAE,CAAeC,EAAanJ,EAAOc,EAAQoC,GAEzClD,EAASA,GAAS,IAClBc,EAASA,GAAU,IACnB/f,KAAKge,IAAImD,UAAagB,GAAS,qBAC/BniB,KAAKge,IAAIoD,SAASgH,EAAY/Y,EAAI4P,EAAQ,EACvCjf,KAAKge,IAAIF,OAAOiC,OAASqI,EAAY9Y,EAAKyQ,EAAS,EAAGd,EAAOc,EACjE,CAED,KAAA9C,GAEMjd,KAAKge,KAEPhe,KAAKge,IAAIiD,UAAU,EAAG,EAAGjhB,KAAKge,IAAIF,OAAOmB,MAAOjf,KAAKge,IAAIF,OAAOiC,OAEnE,CAED,YAAAsI,CAAa1Z,EAAMC,EAAIuT,GAErBniB,KAAKge,IAAIsK,YAAenG,GAAS,qBACjCniB,KAAKge,IAAIyC,YACTzgB,KAAKge,IAAI0C,OAAO/R,EAAKU,EAAGV,EAAKW,GAC7BtP,KAAKge,IAAI2C,OAAO/R,EAAGS,EAAGT,EAAGU,GACzBtP,KAAKge,IAAI6C,YACT7gB,KAAKge,IAAIkC,QACV,CAED,SAAAqI,CAAUla,EAAQ8T,EAAQ,UAExB,MAAMsB,EAAW,IAAIvB,EAAkB,CACrCC,MAAOA,IAGHqB,GAAW,IAAInB,GAAiBC,cAAcjU,GAE9Cma,EAAO,IAAIhG,EAAKgB,EAAUC,GAGhC,OAFA+E,EAAKC,eAAgB,EACrBzoB,KAAKqjB,MAAM/W,IAAIkc,GACRA,CACR,CAED,SAAAE,CAAUC,EAAKviB,EAAM+b,GAEnB/b,EAAOA,GAAQ,EACf+b,EAAQA,GAAS,SACjBwG,EAAMA,GAAO,IAAI3G,EAEjB,MAAM4G,EAAO,IAAIjF,GAAK,IAAI3B,EAAQ5b,EAAMA,EAAMA,QAAOlG,EAAWiiB,GAGhE,OAFAyG,EAAKzD,SAASgC,KAAKwB,GACnB3oB,KAAKqjB,MAAM/W,IAAIsc,GACRA,CACR,CAED,kBAAAC,CAAmBla,EAAMC,EAAImR,EAAS,EAAGoC,EAAQ,UAAW2G,EAAQ,IAElE,MAAM1iB,EAAOuI,EAAKoa,WAAWna,GACvBga,EAAO,IAAIjF,GAAK,IAAI3B,EAAQ8G,EAAO/I,EAAQ3Z,QAAOlG,EAAWiiB,GAE7D7R,EAAS1B,EAAGtG,QAAQ0gB,IAAIra,GAAM4B,eAAe,IAC7C0Y,EAAc3Y,EAAOhI,QAAQuf,YAanC,OAZAvX,EAAOhE,IAAIqC,GAEXia,EAAKzD,SAASgC,KAAK7W,GAOnBsY,EAAK7D,WAAWC,mBAAmB,IAAIhD,EAAQ,EAAG,GAAI,GAAIiH,GAE1DjpB,KAAKqjB,MAAM/W,IAAIsc,GACRA,CACR,CAED,UAAAM,CAAWjK,EAAOc,EAAQoC,GAExB,MAAMqB,EAAW,IAAI2F,EAAclK,EAAOc,GACpC0D,EAAW,IAAI/kB,EAAe,CAClCM,SAAU,CACR0B,OAAQ,CAAExB,MAAO,IAAIkqB,EAAQ,EAAG,EAAG,EAAG,MAExC9pB,aAAc+pB,GACd9pB,eAAgB+pB,GAChBC,aAAa,EACb/pB,YAAY,IAGR8O,EAAQ,IAAIsV,EAAKJ,EAAUC,GAGjC,OAFAnV,EAAMmU,aAAe,IACrBziB,KAAKqjB,MAAM/W,IAAIgC,GACRA,CACR,CAED,eAAAkb,CAAgBb,EAAKviB,EAAM+b,GAEzB/b,EAAOA,GAAQ,EACf+b,EAAQA,GAAS,SAEjB,MAAMsH,GAAM,IAAIC,GAAOC,qBAAqB,IAAI3H,EAAW,IAAIA,EAAQ5b,EAAMA,EAAMA,IAC7EwjB,EAAS,IAAIC,EAAWJ,EAAKtH,GAEnC,OADAyH,EAAOzE,SAASgC,KAAKwB,GAAO,IAAI3G,GACzB4H,CACR,CAED,WAAAE,CAAYnB,EAAKviB,EAAM+b,GAErB/b,EAAOA,GAAQ,EACf+b,EAAQA,GAAS,SACjBwG,EAAMA,GAAO,IAAI3G,EAEjB,MAAM+H,EAAS,IAAI/F,GAAO5d,EAAM+b,GAGhC,OAFA4H,EAAO5E,SAASgC,KAAKwB,GACrB3oB,KAAKqjB,MAAM/W,IAAIyd,GACRA,CACR,CAED,gBAAAC,CAAiBC,EAAcC,GAAO,EAAO/H,EAAQ,UAEnD,MAAMgI,EAAU,IAAIC,EAAiBH,EAAcC,GACnDC,EAAQE,mBACR,MAAMhc,EAAS8b,EAAQG,gBAAgB,KAGvC,OAFoBtqB,KAAKuoB,UAAUla,EAAQ,MAG5C,CAED,kBAAAkc,CAAmBR,EAAQ5H,GAEzBA,EAAQA,GAAS,SACjB,MAAMqB,EAAW,IAAIS,EAAe8F,EAAO/J,OAAQ,GAAI,IACjDyD,EAAW,IAAIM,EAAkB,CAAE5B,MAAOA,IAC1CqI,EAAc,IAAI5G,EAAKJ,EAAUC,GAGvC,OAFA+G,EAAYrF,SAASgC,KAAK4C,EAAOzZ,QACjCma,GAAazW,QAAQ1H,IAAIke,GAClBA,CACR,CAED,gBAAAE,CAAiBX,GAEf,MAAMvG,EAAW,IAAIS,EAAe8F,EAAO/J,OAAQ,GAAI,IACjDyD,EAAW,IAAI/kB,EAAe,CAClCM,SAAU,CACR0B,OAAQ,CAAExB,MAAO,IAAIkqB,EAAQ,EAAG,EAAG,EAAG,MAExC9pB,aAAc+pB,GACd9pB,eAAgB+pB,GAChBC,aAAa,IAGToB,EAAU,IAAI/G,EAAKJ,EAAUC,GACnCkH,EAAQxF,SAASgC,KAAK4C,EAAOzZ,QAC7Bma,GAAazW,QAAQ1H,IAAIqe,EAC1B,CAED,iBAAAC,CAAkBC,GAEhB,MAAMjB,EAAS,IAAIC,EAAWgB,EAAI,UAClCJ,GAAazW,QAAQ1H,IAAIsd,EAC1B,CAED,UAAAkB,CAAWC,EAAOC,GAEhB,MAAMC,EAAS,IAAIjJ,EAAQ,EAAG,EAAG,GAC7BgJ,IAEFC,EAAO3b,EAAI0b,EAAQC,QAAU,GAG/B,IAAK,IAAI3gB,EAAI,EAAGA,EAAIygB,EAAM/hB,OAAS,EAAGsB,IAEpCtK,KAAKuoB,UAAUwC,EAAMzgB,GAAGhC,QAAQgE,IAAI2e,GAASF,EAAMzgB,EAAI,GAAGhC,QAAQgE,IAAI2e,GAEzE,CAED,YAAAC,CAAa9qB,EAAK+P,EAAGgW,GAEnB,MAAMgF,EAAO,IAAIvH,EAAK,IAAIuF,EAAc,EAAG,GAAI,IAAIjD,IAKnD,OAJAlmB,KAAKwnB,uBAAuB9c,KAAKygB,GACjCnrB,KAAKqjB,MAAM/W,IAAI6e,GAEfA,EAAK1H,SAAS+C,YAAYpmB,EAAK+P,EAAGgW,GAC3BgF,CACR,CAED,MAAA1oB,CAAO2oB,GAEL,IAAK,IAAI9gB,EAAI,EAAGA,EAAItK,KAAKwnB,uBAAuBxe,OAAQsB,IAEtDtK,KAAKwnB,uBAAuBld,GAAGmZ,SAASiD,gBAAgBe,GAAQxI,MAAOwI,GAAQ1H,QAE7E/f,KAAKqjB,MAAMK,SAAS1a,OAAS,GAE/BoiB,EAAS3oB,OAAOzC,KAAKqjB,MAAOgI,GAAcrX,QAE7C,GC/GE,MAACsX,GAAgB,IArJtB,MAEE,IAAAxoB,GAEE9C,KAAKurB,MAAQ,GAEbvrB,KAAKwrB,iBAA6B,eAClCxrB,KAAKyrB,iBAA6B,gBAClCzrB,KAAK0rB,mBAA6B,iBAClC1rB,KAAK2rB,eAA6B,iBAElC3rB,KAAK4rB,uBAA6B,yBAClC5rB,KAAK6rB,eAA6B,iBAClC7rB,KAAK8rB,0BAA6B,wBAElC9rB,KAAK+rB,oBAA6B,kBAClC/rB,KAAKgsB,oBAA6B,kBAClChsB,KAAKisB,qBAA6B,wBAElCjsB,KAAKksB,kBAA6B,gBAElClsB,KAAKmsB,0BAA6B,4BAClCnsB,KAAKosB,yBAA6B,2BAElCpsB,KAAKqsB,yBAA6B,2BAClCrsB,KAAKssB,wBAA6B,0BAElCtsB,KAAKusB,4BAA+B,8BACpCvsB,KAAKwsB,2BAA+B,6BAEpCxsB,KAAKysB,kBAAoB,eAC1B,CAED,IAAAC,CAAKC,EAAOC,GAEV,MAAMrB,EAAQvrB,KAAKurB,MAAMoB,GAEzB,QAAczsB,IAAVqrB,EAEF,OAEF,IAAIjhB,EAAIihB,EAAMviB,OACd,KAAOsB,KAELihB,EAAMjhB,GAAGsiB,EAEZ,CAED,EAAAC,CAAGF,EAAOG,QAEyB,IAAtB9sB,KAAKurB,MAAMoB,KAEpB3sB,KAAKurB,MAAMoB,GAAS,IAGtB3sB,KAAKurB,MAAMoB,GAAOjiB,KAAKoiB,EACxB,CAED,iBAAAC,CAAkBC,GAEhBhtB,KAAK0sB,KAAK1sB,KAAKwrB,iBAAkBwB,EAClC,CAED,mBAAAC,CAAoBC,GAElBltB,KAAK0sB,KAAK1sB,KAAKyrB,iBAAkByB,EAClC,CAED,mBAAAC,CAAoBC,GAElBptB,KAAK0sB,KAAK1sB,KAAK0rB,mBAAoB0B,EACpC,CAED,mBAAAC,GAEErtB,KAAK0sB,KAAK1sB,KAAK2rB,eAChB,CAED,2BAAA2B,CAA4BC,GAE1BvtB,KAAK0sB,KAAK1sB,KAAK4rB,uBAAwB2B,EACxC,CAED,mBAAAC,GAEExtB,KAAK0sB,KAAK1sB,KAAK6rB,eAChB,CAED,kBAAA4B,CAAmBC,GAEjB1tB,KAAK0sB,KAAK1sB,KAAKysB,kBAAmBiB,EACnC,CAED,0BAAAC,CAA2BT,GAEzBltB,KAAK0sB,KAAK1sB,KAAK8rB,0BAA2BoB,EAC3C,CAED,oBAAAU,CAAqBC,GAEnB7tB,KAAK0sB,KAAK1sB,KAAK+rB,oBAAqB8B,EACrC,CAED,oBAAAC,CAAqBC,GAEnB/tB,KAAK0sB,KAAK1sB,KAAKgsB,oBAAqB+B,EACrC,CAED,0BAAAC,CAA2BC,GAEzBjuB,KAAK0sB,KAAK1sB,KAAKisB,qBAAsBgC,EACtC,CAED,mBAAAC,CAAoBC,GAElBnuB,KAAK0sB,KAAK1sB,KAAKksB,kBAAmBiC,EACnC,CAED,8BAAAC,CAA+BhV,GAE7BpZ,KAAK0sB,KAAK1sB,KAAKmsB,0BAA2B/S,EAC3C,CAED,6BAAAiV,CAA8BjV,GAE5BpZ,KAAK0sB,KAAK1sB,KAAKosB,yBAA0BhT,EAC1C,CAED,6BAAAkV,CAA8BlV,GAE5BpZ,KAAK0sB,KAAK1sB,KAAKqsB,yBAA0BjT,EAC1C,CAED,4BAAAmV,CAA6BnV,GAE3BpZ,KAAK0sB,KAAK1sB,KAAKssB,wBAAyBlT,EACzC,CAED,gCAAAoV,CAAiCpV,GAE/BpZ,KAAK0sB,KAAK1sB,KAAKusB,4BAA6BnT,EAC7C,CAED,+BAAAqV,CAAgCrV,GAE9BpZ,KAAK0sB,KAAK1sB,KAAKwsB,2BAA4BpT,EAC5C,GC3IH,MAAMsV,GAEJ,WAAA/vB,CAAYgE,GAEV3C,KAAK2C,SAAWA,EAChB3C,KAAK2uB,YAAc,IAAIxL,EACvBnjB,KAAK4uB,eAAiB,IAAInwB,GAC1BuB,KAAK6uB,WAAa,IAAIjL,EACpB,IAAIuF,EAAc,EAAG,GAAInpB,KAAK4uB,gBAChC5uB,KAAK2uB,YAAYriB,IAAItM,KAAK6uB,YAC1B7uB,KAAK8uB,aAAe,IAAIC,GAAoB,EAAG,EAAG,GAAI,GAAI,IAAO,IAClE,CAED,IAAAC,CAAKC,EAAKC,GAERlvB,KAAK6uB,WAAWpL,SAAWzjB,KAAK4uB,eAEhC,MAAMO,GAA0C,IAA5BF,EAAIG,oBAA+BH,EAAII,QAAUJ,EAC/DK,GAA0C,IAA5BL,EAAIG,oBAA+BH,EAAIhQ,MAAUgQ,EAAIxI,MAAMxH,MACzEsQ,GAA0C,IAA5BN,EAAIG,oBAA+BH,EAAIlP,OAAUkP,EAAIxI,MAAM1G,OAE/E/f,KAAK6uB,WAAWpL,SAASzkB,SAASC,SAASC,MAAQiwB,EACnDnvB,KAAK6uB,WAAWpL,SAASzkB,SAASG,YAAYD,MAAMiD,IAAImtB,EAAWC,GAE/DL,EAEFlvB,KAAK6uB,WAAWpL,SAASzkB,SAASK,kBAAkBH,MAAMiD,IAAI+sB,EAAIjQ,MAAOiQ,EAAInP,QAI7E/f,KAAK2C,SAAS6sB,QAAQxvB,KAAK6uB,WAAWpL,SAASzkB,SAASK,kBAAkBH,OAG5Ec,KAAKyvB,SAASP,EACf,CAED,aAAAQ,CAAcC,EAAKT,GAEjBlvB,KAAK6uB,WAAWpL,SAAWkM,EAI3B3vB,KAAKyvB,SAASP,EACf,CAED,kBAAAU,CAAmBX,EAAKC,EAAKS,GAE3B,MAAMR,GAA0C,IAA5BF,EAAIG,oBAA+BH,EAAII,QAAUJ,EAC/DK,GAA0C,IAA5BL,EAAIG,oBAA+BH,EAAIhQ,MAAUgQ,EAAIxI,MAAMxH,MACzEsQ,GAA0C,IAA5BN,EAAIG,oBAA+BH,EAAIlP,OAAUkP,EAAIxI,MAAM1G,OAE/E/f,KAAK6uB,WAAWpL,SAAWkM,EAC3B3vB,KAAK6uB,WAAWpL,SAASzkB,SAASC,SAASC,MAAQiwB,EACnDnvB,KAAK6uB,WAAWpL,SAASzkB,SAASG,YAAYD,MAAMiD,IAAImtB,EAAWC,GAE/DL,EAEFlvB,KAAK6uB,WAAWpL,SAASzkB,SAASK,kBAAkBH,MAAMiD,IAAI+sB,EAAIjQ,MAAOiQ,EAAInP,QAI7E/f,KAAK2C,SAAS6sB,QAAQxvB,KAAK6uB,WAAWpL,SAASzkB,SAASK,kBAAkBH,OAG5Ec,KAAKyvB,SAASP,EACf,CAED,wBAAAW,CAAyBC,EAAQH,GAE/B3vB,KAAK6uB,WAAWpL,SAAWkM,EAE3B3vB,KAAKyvB,SAASK,EACf,CAED,OAAAtxB,GAEEwB,KAAK6uB,WAAWrL,SAAShlB,UACzBwB,KAAK6uB,WAAWpL,SAASjlB,SAC1B,CAED,QAAAixB,CAASxH,GAEPA,OAAY/nB,IAAP+nB,EAAmB,KAAOA,EAE/B,MAAM8H,EAAa/vB,KAAK2C,SAASqtB,kBAEjChwB,KAAK2C,SAASstB,qBAAuB/vB,IAAP+nB,EAAmB,KAAOA,GACxDjoB,KAAK2C,SAASF,OAAOzC,KAAK2uB,YAAa3uB,KAAK8uB,cAE5C9uB,KAAK2C,SAASstB,gBAAgBF,EAC/B,EC3FH,MAAMG,WAAiCzxB,GAErC,WAAAE,CAAYwxB,EAAaC,GAEvBrxB,2aACAiB,KAAKhB,SAASqxB,aAAe,CAAEnxB,MAAO,IAAIkqB,EAAQ+G,EAAaC,EAAa/gB,EAAG+gB,EAAa9gB,EAAG8gB,EAAahgB,GAC7G,ECPH,MAAMkgB,WAA4B5xB,EAEhC,WAAAC,GAEEI,MAAM,CACJC,SAAU,CACRuxB,UAAW,CAAErxB,MAAO,IAEtBI,6QACAC,8dAEH,CAED,aAAIixB,CAAUtxB,GAEZc,KAAKhB,SAASuxB,UAAUrxB,MAAQA,CACjC,CAED,aAAIsxB,GAEF,OAAOxwB,KAAKhB,SAASuxB,UAAUrxB,KAChC,ECjBH,MAAMuxB,GAEJ,WAAA9xB,GAEEqB,KAAKioB,GAAK,IAAIyI,EAAkBjJ,GAAQxI,MAAOwI,GAAQ1H,QAEvD/f,KAAK2wB,uBAAyB,IAAIT,GAAyB,EAAG,IAAIlO,EAAQ,EAAG,EAAG,IAChFhiB,KAAK4wB,sBAAwB,IAAIN,EAClC,CAED,MAAA7tB,CAAO2oB,GAELprB,KAAK6wB,2BAELzF,EAASnO,MAAMjd,KAAKioB,QAAI/nB,GAAW,GAAM,GAEzCkrB,EAASyE,yBAAyB7vB,KAAKioB,GAAIjoB,KAAK2wB,wBAEhD3wB,KAAK4wB,sBAAsBJ,UAAYnF,GAAcrX,QAAQgT,IAE7DoE,EAAS3oB,YAAOvC,OAAWA,EAAWF,KAAKioB,GAAIjoB,KAAK4wB,sBACrD,CAED,wBAAAC,GAEM7wB,KAAKioB,GAAGhJ,QAAUwI,GAAQxI,OAASjf,KAAKioB,GAAGlI,SAAW0H,GAAQ1H,QAEhE/f,KAAKioB,GAAG6I,QAAQrJ,GAAQxI,MAAOwI,GAAQ1H,OAE1C,CAED,iBAAIgR,GAEF,OAAO/wB,KAAKioB,EACb,ECqWE,MAACmD,GAAW,IA3XjB,MAEE,IAAAtoB,EAAKgb,OAAEA,EAAMkT,gBAAEA,EAAeC,mBAAEA,EAAkBC,mBAAEA,EAAkB3L,IAAEA,IAEtEvlB,KAAKmxB,eAAYjxB,EACjBF,KAAKoxB,aAAUlxB,EACfF,KAAK8d,YAAS5d,EACdF,KAAKqxB,eAAYnxB,EACjBF,KAAKsxB,yBAAsBpxB,EAC3BF,KAAKuxB,4BAA6B,EAClCvxB,KAAKwxB,gCAA6BtxB,EAElCF,KAAKyxB,WAAY,EACjBzxB,KAAK0xB,oBAAiBxxB,EACtBF,KAAKixB,wBAAqB/wB,EAE1BF,KAAKgxB,gBAAkB,CACrBW,cAAc,EACdC,YAAY,GAGd5xB,KAAKixB,mBAAqB,CACxBY,OAAO,EACPC,WAAW,EACXhJ,OAAO,EACPiJ,gBAAgB,EAChBC,8BAA8B,EAC9BC,gBAAiB,mBACjBC,oBAAoB,EACpBC,uBAAuB,EACvBC,SAAS,GAGXpyB,KAAKkxB,mBAAqB,CACxBmB,wBAAwB,GAG1B1gB,OAAOsK,OAAOjc,KAAKgxB,gBAAiBA,GACpCrf,OAAOsK,OAAOjc,KAAKixB,mBAAoBA,GAEvCtf,OAAOsK,OAAOjc,KAAKkxB,mBAAoBlxB,KAAKixB,oBAC5Ctf,OAAOsK,OAAOjc,KAAKkxB,mBAAoBA,GAEnClxB,KAAKgxB,gBAAgBW,aAEvB3xB,KAAK0xB,eAAiB5T,EAAOG,WAAW,SAAUje,KAAKixB,qBACjCnT,EAAOG,WAAW,QAASje,KAAKixB,qBAChCnT,EAAOG,WAAW,qBAAsBje,KAAKixB,oBAInEjxB,KAAK0xB,eAAiB5T,EAAOG,WAAW,QAASje,KAAKixB,qBAChCnT,EAAOG,WAAW,qBAAsBje,KAAKixB,oBAGrEjxB,KAAKyxB,UAAqD,2BAAzCzxB,KAAK0xB,eAAe/yB,YAAYoF,KAIjD/D,KAAKkxB,mBAAmBpT,OAASA,EACjC9d,KAAKkxB,mBAAmBxuB,QAAU1C,KAAK0xB,eAEvC1xB,KAAKmxB,UAAY,IAAImB,EAActyB,KAAKkxB,oBAEpClxB,KAAKgxB,gBAAgBY,WAEvB5xB,KAAKmxB,UAAUoB,GAAGC,SAAU,EAI5BxyB,KAAKmxB,UAAUsB,WAAY,EAG7BhL,GAAQlC,IAAMA,EACdvlB,KAAKmxB,UAAUuB,cAAc,GAExB1yB,KAAKyxB,WAERzxB,KAAKmxB,UAAUwB,WAAW/pB,IAAI,0BAGhC5I,KAAKoxB,QAAU,IAAI1C,GAAQ1uB,KAAKmxB,WAEhCnxB,KAAK8d,OAAS9d,KAAKmxB,UAAUyB,WAE7B5yB,KAAKqxB,UAAY,IAAI7uB,GAErBxC,KAAKsxB,oBAAsBtxB,KAAKqxB,UAEhCwB,GAAapR,eAAiBzhB,KAAKmxB,UAAU3P,aAAasR,mBAC1DD,GAAanR,iCAAmC1hB,KAAKmxB,UAAU3P,aAAauR,kBAAoB,EAChGF,GAAalR,sBAAwB3hB,KAAKgzB,sCAE1ChzB,KAAKuxB,4BAA6B,EAElCvxB,KAAKwxB,2BAA6B,IAAIf,EACvC,CAED,eAAIwC,GAEF,OAAOjzB,KAAKmxB,UAAUyB,UACvB,CAED,oBAAIM,GAEF,OAAOlzB,KAAKwxB,2BAA2BT,aACxC,CAED,SAAA/U,CAAUmX,GAIRnzB,KAAKsxB,oBAAoBrzB,QAAQ+B,KAAMA,KAAKmxB,WAC5CnxB,KAAKsxB,oBAAsB6B,EAC3BnzB,KAAKsxB,oBAAoBtzB,SAASgC,KAAMA,KAAKmxB,UAC9C,CAED,MAAAhzB,GAEM6B,KAAKuxB,4BAEPvxB,KAAKwxB,2BAA2B/uB,OAAOzC,MAGzCA,KAAKozB,0BAED/H,GAAcrX,SAEhBhU,KAAKsxB,oBAAoB7uB,SAG3BglB,GAAQtpB,QACT,CAED,uBAAAi1B,GAEM/H,GAAcrX,UAEhBqX,GAAcrX,QAAQ8S,OAASW,GAAQzB,aACvCqF,GAAcrX,QAAQqf,yBACtBhI,GAAcrX,QAAQsf,eACtBjI,GAAcrX,QAAQuf,mBAAkB,GAE3C,CAED,MAAA9wB,CAAO4gB,EAAO5F,EAAQwK,EAAIuL,GAExBxzB,KAAKyzB,0BAA0BpQ,EAAOmQ,GAEtCxzB,KAAKmxB,UAAUlB,qBAAuB/vB,IAAP+nB,EAAmB,KAAOA,GACzDjoB,KAAKmxB,UAAU1uB,OAAO4gB,GAAUoH,GAAazW,QAC3CyJ,GAAU4N,GAAcrX,SAE1BhU,KAAKyzB,0BAA0BpQ,OAAOnjB,EACvC,CAED,YAAAwzB,CAAarQ,GAEPA,EAAM/kB,eAER+kB,EAAM/kB,gBAGJ+kB,EAAM5gB,OAER4gB,EAAM5gB,SAINzC,KAAKyC,OAAO4gB,OAAOnjB,GAGjBmjB,EAAMhlB,gBAERglB,EAAMhlB,gBAET,CAED,yBAAAo1B,CAA0BpQ,EAAOsM,GAE/BA,OAAczvB,IAARyvB,EAAoB,KAAOA,EAC7BtM,EAEFA,EAAMsQ,iBAAmBhE,EAIzBlF,GAAazW,QAAQ2f,iBAAmBhE,CAE3C,CAED,WAAAiE,CAAY3L,EAAI4L,GAEd7zB,KAAKmxB,UAAU2C,uBAAuB7L,EAAI,EAAG,EAAGA,EAAGhJ,MAAOgJ,EAAGlI,OAAQ8T,EACtE,CAED,KAAA5W,CAAMgL,EAAIxK,EAAQ0S,EAAa4D,GAE7B/zB,KAAKmxB,UAAUlB,qBAAuB/vB,IAAP+nB,EAAmB,KAAOA,GAErDxK,GAEFzd,KAAKmxB,UAAU6C,cAAcvW,EAAOwJ,YAAaxJ,EAAOyJ,aAG1DlnB,KAAKmxB,UAAUlU,QAAQQ,IACnB0S,IACA4D,EACL,CAED,SAAAE,CAAUC,EAAS3O,GAEjB,IAAK,MAAM4O,KAASD,EAElBzM,GAAQlC,IAAMA,EAGdkC,GAAQhC,gBAAgB0O,EAAMC,YAAY/kB,EAAG8kB,EAAMC,YAAY9kB,GAC/DmY,GAAQ9B,YAAYwO,EAAMC,YAAYnV,MAAOkV,EAAMC,YAAYrU,QAE/D/f,KAAK8d,OAAOmB,MAASwI,GAAQrC,aAC7BplB,KAAK8d,OAAOiC,OAAS0H,GAAQpC,cAE7BrlB,KAAKmxB,UAAUkD,YAAY,EAAG,EAAG5M,GAAQrC,aAAcqC,GAAQpC,eAE/DrlB,KAAKozB,yBAER,CAED,aAAA1D,CAAcC,EAAKT,GAEjBlvB,KAAKoxB,QAAQ1B,cAAcC,EAAKT,EACjC,CAED,IAAAF,CAAKsF,EAAQxE,EAAQH,GAEfA,EAEF3vB,KAAKoxB,QAAQxB,mBAAmB0E,EAAQxE,EAAQH,GAIhD3vB,KAAKoxB,QAAQpC,KAAKsF,EAAQxE,EAE7B,CAED,wBAAAD,CAAyBC,EAAQH,GAE/B3vB,KAAKoxB,QAAQvB,yBAAyBC,EAAQH,EAC/C,CAED,eAAA4E,CAAgBC,EAAevV,EAAQwI,GAAQxI,MAAOc,EAAS0H,GAAQ1H,QAIrE,MAAM0U,EAAYhN,GAAQxI,MACpByV,EAAajN,GAAQ1H,OAErB4U,EAAY1V,EACZ2V,EAAa7U,EAEb8U,EAAa,KACbC,EAAc,KAEdC,EAAcC,SAASjnB,KAAKgR,KAAK4V,EAAYE,IAC7CI,EAAcD,SAASjnB,KAAKgR,KAAK6V,EAAaE,IAEpDrN,GAAQ9B,YAAYkP,EAAYC,GAChC,MAAMI,EAAUl1B,KAAKmxB,UAAUgE,gBAC/Bn1B,KAAKmxB,UAAUuB,cAAc,GAE7B1yB,KAAKmxB,UAAUL,QAAQ+D,EAAYC,GAAa,GAEhD,MACMM,EADYnqB,SAAS8S,cAAc,UAChBE,WAAW,MAEpCmX,EAAOtX,OAAOmB,MAAS0V,EACvBS,EAAOtX,OAAOiC,OAAS6U,EAEvBvJ,GAAcrX,QAAQ8S,OAASW,GAAQzB,aACvCqF,GAAcrX,QAAQsf,eACtBjI,GAAcrX,QAAQuf,mBAAkB,GAExC,IAAK,IAAIlkB,EAAI,EAAGA,EAAI0lB,EAAa1lB,IAE/B,IAAK,IAAIC,EAAI,EAAGA,EAAI2lB,EAAa3lB,IAE/B+b,GAAcrX,QAAQqhB,cAAcV,EAAuBC,EACzDnN,GAAQxI,MAAQ5P,EAAWoY,GAAQ1H,OAASzQ,EAC5CmY,GAAQxI,MAAkBwI,GAAQ1H,QACpC/f,KAAKsxB,oBAAoB7uB,SAEzB2yB,EAAOE,UAAUt1B,KAAKmxB,UAAUyB,WAAYnL,GAAQxI,MAAQ5P,EAAGoY,GAAQ1H,OAASzQ,GAMpF8lB,EAAOtX,OAAOyX,OAAOf,EAAe,qBAEpCnJ,GAAcrX,QAAQwhB,kBAEtB/N,GAAQ9B,YAAY8O,EAAWC,GAC/B10B,KAAKmxB,UAAUuB,cAAcwC,GAC7Bl1B,KAAKmxB,UAAUL,QAAQ2D,EAAWC,GAAY,GAE9CrJ,GAAcrX,QAAQ8S,OAASW,GAAQzB,aACvCqF,GAAcrX,QAAQsf,eACtBjI,GAAcrX,QAAQuf,mBAAkB,EACzC,CAED,mBAAAkC,CAAoBC,GAElB,MAAMC,EAAO1qB,SAAS8S,cAAc,KACpC4X,EAAKC,SAAW,eAEhBD,EAAKE,KAAOC,IAAIC,gBAAgBL,GAChCC,EAAKK,QAELL,EAAKM,QAAU,WAEbC,uBAAsB,WAEpBJ,IAAIK,gBAAgBR,EAAKE,KACjC,IACMF,EAAKS,gBAAgB,OAC3B,CACG,CAED,OAAA53B,GAEEwB,KAAKmxB,UAAU3yB,UACfwB,KAAKsxB,oBAAoB9yB,UACzBwB,KAAKoxB,QAAQ5yB,SACd,CAED,mCAAAw0B,GAEE,MAAM/K,EAAK,IAAIyI,EAAkB,EAAG,EAAG,CACrC2F,UAAW1W,EACX2W,UAAW3W,EACX4W,OAAQC,EACRC,WAAYC,EACZC,KAAMC,EACNC,eAAe,EACfC,aAAa,IAgBTnH,EAAM,IAAIjxB,EAAe,CAC7BY,aAdW,qGAeXC,eATW,oGAUXC,YAAY,EACZC,SAAUC,EACVC,WAAW,EACXC,UAAWC,IAGbG,KAAK0vB,cAAcC,EAAK1H,GAExB,MAAM8O,EAAS,IAAIC,aAAa,GAGhC,OAFAh3B,KAAKmxB,UAAU2C,uBAAuB7L,EAAI,EAAG,EAAG,EAAG,EAAG8O,GAE/ChpB,KAAKqB,IAAI2nB,EAAO,GAAK,SAAW,IACxC,GC7YH,MAAME,GAEJ,WAAAt4B,GAEC,CAED,gBAAIu4B,GAEF,OAAO,CACR,CAED,QAAAl5B,CAASyM,GAGR,CAED,MAAAtM,CAAOsM,GAEN,CAED,OAAAxM,CAAQwM,GAGP,ECnBH,MAAM0sB,GAEJ,WAAAx4B,GAEEqB,KAAK8O,EAAI,EACT9O,KAAKo3B,kBAAoB,CAC1B,CAED,gBAAIF,GAEF,OAAO,CACR,CAED,QAAAl5B,CAASq5B,GAER,CAED,MAAAl5B,CAAOk5B,GAELr3B,KAAK8O,GAAKoN,GAAK/J,WAAaklB,EAASxlB,SAErC7R,KAAKo3B,kBAAoBC,EAAS7jB,gBAAgBxT,KAAK8O,GACvD9O,KAAKo3B,kBAAoBpqB,GAAMuC,MAAMvP,KAAKo3B,kBAAmB,EAAG,GAEhEC,EAASC,mBAAmBtqB,GAAMgC,KAAKqoB,EAAS1oB,KAAM0oB,EAASzoB,GAAI5O,KAAKo3B,oBAEpEp3B,KAAKo3B,mBAAqB,QAE5BC,EAASC,mBAAmBD,EAASzoB,IAErCyoB,EAASE,kBAAkB,IAAIN,IAC/BI,EAASG,kBAAkBH,GAE9B,CAED,OAAAp5B,CAAQwM,GAGP,ECtCH,MAAMgtB,GAEJ,WAAA94B,EAAYsa,QACVA,EAAOye,aACPA,EAAY/oB,KACZA,EAAO,EAACC,GACRA,EAAK,EAACiD,SACNA,EAAW,EAAC8lB,aACZA,EAAe,GAAEC,aACjBA,EAAgB,GAAEpkB,gBAClBA,EAAkBW,GAAgBW,kBAAiB0iB,kBACnDA,EAAoB,WAIpBx3B,KAAKiZ,QAAUA,EACfjZ,KAAK03B,aAAeA,EACpB13B,KAAK2O,KAAOA,EACZ3O,KAAK4O,GAAKA,EACV5O,KAAK23B,aAAeA,EACpB33B,KAAK43B,aAAeA,EACpB53B,KAAK6R,SAAWA,EAChB7R,KAAKwT,gBAAkBA,EACvBxT,KAAKw3B,kBAAoBA,EAEzBx3B,KAAK0b,cAAgB,IAAIub,EAC1B,CAED,OAAAY,GAEE73B,KAAKu3B,kBAAkB,IAAIJ,GAC5B,CAED,IAAAplB,GAEE/R,KAAKu3B,kBAAkB,IAAIN,GAC5B,CAED,kBAAAK,CAAmBp4B,GAEjBc,KAAKiZ,QAAQvM,MAAM1M,KAAK03B,cAAgB,GAAG13B,KAAK23B,eAAez4B,IAAQc,KAAK43B,cAC7E,CAED,MAAAz5B,GAEE6B,KAAK0b,cAAcvd,OAAO6B,KAC3B,CAED,gBAAIk3B,GAEF,OAAOl3B,KAAK0b,cAAcwb,YAC3B,CAED,iBAAAK,CAAkBne,GAEhBpZ,KAAK0b,cAAczd,QAAQ+B,MAC3BA,KAAK0b,cAAgBtC,EACrBpZ,KAAK0b,cAAc1d,SAASgC,KAC7B,ECLE,MAAC83B,GAAK,IAxDX,MAEE,IAAAh1B,GAEE9C,KAAK+3B,kBAAoB,CACvBC,QAAS,UACTC,IAAK,MACLC,MAAO,QACPC,IAAK,MACLC,QAAS,WAGXp4B,KAAKq4B,YAAel1B,UAAUC,UAAUwB,MAAM,+GAC9C5E,KAAKs4B,WAAan1B,UAAUC,UAAUwB,MAAM,QAAUzB,UAAUo1B,gBAAkBp1B,UAAUo1B,eAAiB,GAC7Gv4B,KAAKw4B,SAAWr1B,UAAUC,UAAUwB,MAAM,uBAAyB5E,KAAKs4B,QAExEt4B,KAAKy4B,WAAaz4B,KAAK04B,WAAa14B,KAAK+3B,kBAAkBC,QAC3Dh4B,KAAK24B,SAAW34B,KAAK04B,WAAa14B,KAAK+3B,kBAAkBG,MACzDl4B,KAAK44B,OAAS54B,KAAK04B,WAAa14B,KAAK+3B,kBAAkBI,IACvDn4B,KAAK64B,WAAa74B,KAAK04B,WAAa14B,KAAK+3B,kBAAkBK,OAC5D,CAED,MAAAM,GAEE,MAAMt1B,EAAYD,UAAUC,UACtB01B,EAAW31B,UAAU21B,SAI3B,IAAIhB,EAAK,KAuBT,OArB0C,IALnB,CAAC,YAAa,WAAY,SAAU,UAKxCl0B,QAAQk1B,GAEzBhB,EAAK93B,KAAK+3B,kBAAkBI,KAEe,IAPxB,CAAC,SAAU,OAAQ,QAOlBv0B,QAAQk1B,GAE5BhB,EAAK93B,KAAK+3B,kBAAkBE,KAEmB,IAZxB,CAAC,QAAS,QAAS,UAAW,SAY7Br0B,QAAQk1B,GAEhChB,EAAK93B,KAAK+3B,kBAAkBK,QAErB,UAAUvzB,KAAKzB,GAEtB00B,EAAK93B,KAAK+3B,kBAAkBC,SAEpBF,GAAM,QAAQjzB,KAAKi0B,KAE3BhB,EAAK93B,KAAK+3B,kBAAkBG,OAGvBJ,CACR,GCtCH,MAAMiB,GAA2B,IAdjC,MAEE,IAAAj2B,GAEE9C,KAAKg5B,qBAAkB94B,EACvBF,KAAKi5B,gBAAkB,IAAIjX,CAC5B,CAED,mBAAAkX,CAAoB1V,GAElBxjB,KAAKg5B,gBAAkBxV,CACxB,GCyBE,MAACnc,GAAqB,IApC3B,MAEE,IAAAvE,GAEE9C,KAAKm5B,UAAY,GACjBn5B,KAAKsH,iBAAmB,EACzB,CAED,YAAAa,CAAapE,EAAMoC,EAAK0nB,GAETlc,OAAOC,KAAK5R,KAAKsH,kBAErB5D,SAASyC,GAEhBnG,KAAKm5B,UAAUp1B,GAAQ/D,KAAKsH,iBAAiBnB,IAI7CnG,KAAKm5B,UAAUp1B,GAAQ8pB,EACvB7tB,KAAKsH,iBAAiBnB,GAAO0nB,GAG/BuL,GAAaxL,qBAAqB,CAAE7pB,KAAMA,EAAM7E,MAAO2uB,GACxD,CAED,YAAAwL,CAAat1B,GAEX,OAAO/D,KAAKm5B,UAAUp1B,EACvB,CAED,GAAA6E,CAAI7E,GAEF,OAAO/D,KAAKm5B,UAAUp1B,EACvB,GCjCH,MAAMu1B,GAEJ,WAAA36B,CAAY6kB,EAAU+V,GAEpBv5B,KAAKwjB,SAAWA,EAEhBxjB,KAAKyjB,cAAWvjB,EAChBF,KAAKhB,SAAW,GAChBgB,KAAKu5B,YAAcA,EAEnBv5B,KAAKw5B,cAAgB,GAErBx5B,KAAKy5B,kBAAev5B,EAEpBF,KAAK05B,YAAc,IAAIt6B,EACvBY,KAAK25B,aAAe,IAAIv6B,EAExBY,KAAK45B,oBAAsB,EAE3B55B,KAAK65B,wBAA0B,CAChC,CAED,IAAA/2B,CAAK22B,EAAc56B,EAAaD,GAE9BoB,KAAKyjB,SAAW,IAAI/kB,EAAe,CACjCM,SAAUgB,KAAKhB,SACfM,aAAcT,EACdU,eAAgBX,IAElBoB,KAAKy5B,aAAeA,CACrB,CAED,kBAAAK,CAAmB/1B,EAAMmF,GAEvBlJ,KAAKhB,SAAS+E,GAAQ,CAAE7E,MAAOgK,GAC/BlJ,KAAKyjB,SAAS5D,aAAc,CAC7B,CAED,kBAAAka,CAAmBh2B,EAAMmF,GAEvBlJ,KAAKhB,SAAS+E,GAAM7E,MAAQgK,CAC7B,CAED,qBAAA8wB,CAAsBC,EAAcC,GAElC,MAAMC,EAAgBn6B,KAAKo6B,qBAAqBp6B,KAAKu5B,aAC/Cc,EAAgBr6B,KAAKo6B,qBAAqBp6B,KAAKu5B,aAC/Ce,EAAgBt6B,KAAKo6B,qBAAqB,GAE1CG,EAAev6B,KAAKw6B,mBAAmBP,EAAcE,EAASE,EAASC,GAEzEJ,GAEFl6B,KAAKy6B,yBAAyBF,EAAcL,EAE/C,CAED,qBAAAQ,CAAsBT,EAAcU,GAElC,MAAMR,EAAgBn6B,KAAK46B,sBAAsB56B,KAAKu5B,aAChDc,EAAgBr6B,KAAK46B,sBAAsB56B,KAAKu5B,aAChDe,EAAgBt6B,KAAK46B,sBAAsB,GAE3CL,EAAev6B,KAAKw6B,mBAAmBP,EAAcE,EAASE,EAASC,GAEzEK,GAEF36B,KAAK66B,0BAA0BN,EAAcI,EAEhD,CAED,2BAAAG,CAA4Bb,EAAcU,GAExC,MAAMR,EAAgBn6B,KAAK+6B,4BAA4B/6B,KAAKu5B,aACtDc,EAAgBr6B,KAAK+6B,4BAA4B/6B,KAAKu5B,aACtDe,EAAgBt6B,KAAK+6B,4BAA4B,GAEjDR,EAAev6B,KAAKw6B,mBAAmBP,EAAcE,EAASE,EAASC,GAEzEK,GAEF36B,KAAK66B,0BAA0BN,EAAcI,EAEhD,CAED,qBAAAK,CAAsBC,EAAahB,EAAciB,EAASC,EAAOC,EAAOC,GAEtE,MAAMC,EAAYt7B,KAAKu7B,mBAAmBN,GACpCO,EAAex7B,KAAKy7B,mBAAmBxB,GAE7Cj6B,KAAK07B,gBAAgBF,EAAavM,IAAKqM,EAAWJ,EAASC,EAAOC,EAAOC,GACzEr7B,KAAK07B,gBAAgBF,EAAaG,UAAW,EAAGT,EAASC,EAAOC,EAAOC,GAEvEG,EAAaI,oBAAsBN,EAEnCE,EAAaK,aACd,CAED,qBAAAC,CAAsBb,EAAahB,EAAc8B,EAASZ,EAAOC,EAAOC,EAAOW,GAE7E,MAAMV,EAAYt7B,KAAKu7B,mBAAmBN,GACpCO,EAAex7B,KAAKy7B,mBAAmBxB,GAE7Cj6B,KAAKi8B,iBAAiBT,EAAavM,IAAKqM,EAAWS,EAASZ,EAAOC,EAAOC,EAAOW,GACjFh8B,KAAKi8B,iBAAiBT,EAAaG,UAAW,EAAGI,EAASZ,EAAOC,EAAOC,EAAOW,GAC/ER,EAAaI,oBAAsBN,EAEnCE,EAAaK,aACd,CAED,mBAAAK,CAAoBv5B,EAAUw5B,GAE5B,IAAK,IAAI7xB,EAAI,EAAGA,EAAItK,KAAKw5B,cAAcxwB,OAAQsB,IAEzC6xB,EAAgB,GAAKn8B,KAAKw5B,cAAclvB,GAAGuxB,YAAc,IAEjB,IAAtC77B,KAAKw5B,cAAclvB,GAAGuxB,aAExB77B,KAAKo8B,8BAA8Bz5B,EAAU3C,KAAKw5B,cAAclvB,IAE9DtK,KAAKw5B,cAAclvB,GAAGuxB,YAAc,GAEtC77B,KAAKq8B,2BAA2B15B,EAAU3C,KAAKw5B,cAAclvB,IAG/DtK,KAAKw5B,cAAclvB,GAAGuxB,YAAc,EAEpCM,IAGL,CAED,uBAAAG,GAEEt8B,KAAK45B,oBAAsB,EAC3B,IAAK,IAAItvB,EAAI,EAAGA,EAAItK,KAAKw5B,cAAcxwB,OAAQsB,IAEzCtK,KAAKw5B,cAAclvB,GAAGuxB,YAAc,GAEtC77B,KAAK45B,sBAGT,OAAO55B,KAAK45B,mBACb,CAED,0BAAAyC,CAA2B15B,EAAU45B,GAGnCA,EAAarN,IAAIrP,aAAc,EAC/Bld,EAAS65B,qBACPx8B,KAAK05B,YACL6C,EAAatN,IACbsN,EAAarN,IAEhB,CAED,6BAAAkN,CAA8Bz5B,EAAU45B,GAGtC,MAAME,EAAQF,EAAaX,qBACZ,IAAXa,IAKJz8B,KAAK25B,aAAarqB,EAAIvB,KAAK4C,MAAM8rB,EAAQz8B,KAAKu5B,aAC9Cv5B,KAAK25B,aAAatqB,EAAIotB,EAAQz8B,KAAKu5B,YAAcv5B,KAAK25B,aAAarqB,EACnE3M,EAAS65B,qBACPx8B,KAAK25B,aACL4C,EAAaZ,UACbY,EAAarN,KAEhB,CAED,QAAAwN,GAEE,OAAO,IAAI9Y,EAAK5jB,KAAKwjB,SAAUxjB,KAAKyjB,SACrC,CAED,eAAAiY,CAAgBF,EAAciB,EAAOvB,EAASC,EAAOC,EAAOC,GAEtDF,IAEFK,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKvB,EAAQ7rB,GAE/C+rB,IAEFI,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKvB,EAAQ5rB,GAE/C+rB,IAEFG,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKvB,EAAQ9qB,EAEpD,CAED,gBAAA6rB,CAAiBT,EAAciB,EAAOV,EAASZ,EAAOC,EAAOC,EAAOW,GAE9Db,IAEFK,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKV,EAAQ1sB,GAE/C+rB,IAEFI,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKV,EAAQzsB,GAE/C+rB,IAEFG,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKV,EAAQ3rB,GAE/C4rB,IAEFR,EAAa/U,MAAMvd,KAAa,EAARuzB,EAAY,GAAKV,EAAQ5rB,EAEpD,CAED,wBAAAsqB,CAAyBe,EAAcmB,GAErC,IAAK,IAAIryB,EAAI,EAAGA,EAAItK,KAAKu5B,YAAcv5B,KAAKu5B,YAAajvB,IAEvDtK,KAAK07B,gBAAgBF,EAAavM,IAAK3kB,EAAGqyB,GAAI,GAAM,GAAM,GAC1DnB,EAAaK,aAEhB,CAED,yBAAAhB,CAA0BW,EAAcoB,GAEtC,IAAK,IAAItyB,EAAI,EAAGA,EAAItK,KAAKu5B,YAAcv5B,KAAKu5B,YAAajvB,IAEvDtK,KAAKi8B,iBAAiBT,EAAavM,IAAK3kB,EAAGsyB,GAAI,GAAM,GAAM,GAAM,GACjEpB,EAAaK,aAEhB,CAED,oBAAAzB,CAAqBnb,GAEnB,MAAM/V,EAAO,IAAI2zB,WAAW,EAAI5d,EAAQA,GACxC,OAAO,IAAI6d,EAAY5zB,EAAM+V,EAAOA,EAAOuX,EAC5C,CAED,qBAAAoE,CAAsB3b,GAEpB,MAAM/V,EAAO,IAAI2zB,WAAW,EAAI5d,EAAQA,GACxC,OAAO,IAAI6d,EAAY5zB,EAAM+V,EAAOA,EAAOuX,EAC5C,CAED,2BAAAuE,CAA4B9b,GAE1B,MAAM/V,EAAO,IAAI8tB,aAAa,EAAI/X,EAAQA,GAC1C,OAAO,IAAI6d,EAAY5zB,EAAM+V,EAAOA,EAAOuX,EAAYI,EACxD,CAED,kBAAA6E,CAAmBxB,GAEjB,IAAK,IAAI3vB,EAAI,EAAGA,EAAItK,KAAKw5B,cAAcxwB,OAAQsB,IAE7C,GAAItK,KAAKw5B,cAAclvB,GAAGvG,OAASk2B,EAEjC,OAAOj6B,KAAKw5B,cAAclvB,GAG9BzD,QAAQM,MAAM,gBAAkB8yB,EAAe,kBAEhD,CAED,kBAAAsB,CAAmBx3B,GAEjB,IAAK,IAAIuG,EAAI,EAAGA,EAAItK,KAAKy5B,aAAazwB,OAAQsB,IAE5C,GAAItK,KAAKy5B,aAAanvB,KAAOvG,EAE3B,OAAOuG,EAGXzD,QAAQM,MAAM,YAAcpD,EAAO,kCAEpC,CAED,kBAAAy2B,CAAmBP,EAAc9K,EAAa4N,EAAaC,GAczD,OAZAD,EAAYld,aAAc,EAE1B7f,KAAKw5B,cAAc9uB,KAAK,CACtB3G,KAAMk2B,EACNhL,IAAKE,EACLD,IAAK6N,EACLpB,UAAWqB,EACXpB,qBAAsB,EACtBC,YAAa,IAGf77B,KAAKhB,SAASi7B,GAAgB,CAAE/6B,MAAO69B,GAChC/8B,KAAKw5B,cAAcx5B,KAAKw5B,cAAcxwB,OAAS,EACvD,CAED,OAAAxK,GAEE,IAAK,IAAI8L,EAAI,EAAGA,EAAItK,KAAKw5B,cAAcxwB,OAAQsB,IAE7CtK,KAAKw5B,cAAclvB,GAAG2kB,IAAIzwB,UAC1BwB,KAAKw5B,cAAclvB,GAAG4kB,IAAI1wB,UAC1BwB,KAAKw5B,cAAclvB,GAAGqxB,UAAUn9B,SAEnC,EClPH,MAAMy+B,GAAmB,IAvDzB,MAEE,IAAAn6B,GAEE9C,KAAKk9B,QAAU,EAChB,CAED,KAAAC,CAAMC,GAEJ,MAAMC,EAAoB,GACpBC,EAAgBtwB,GAAMuwB,eAAexvB,KAAK6H,KAAKwnB,EAAkBp0B,SAGvEhJ,KAAKw9B,gBAAgBH,EAAmBC,GAExC,IAAIG,EAAW,EAEf,IAAK,IAAInzB,EAAI,EAAGA,EAAI8yB,EAAkBp0B,OAAQsB,IAC9C,CACE,MAAMozB,EAAeN,EAAkB9yB,GAAGoN,aAAa,YAAYimB,MAC7DruB,EAAIvB,KAAK4C,MAAMrG,EAAIgzB,GACnBjuB,EAAI/E,EAAIgzB,EAAgBhuB,EAC9B,IAAK,IAAIquB,EAAQ,EAAGA,EAAQD,EAAcC,IAExCN,EAAkBI,GAAapuB,EAAIiuB,EAAiB,GAAMA,EAC1DD,EAAkBI,EAAW,GAAMnuB,EAAIguB,EAAiB,GAAMA,EAC9DG,GAAY,CAEf,CAED,MAAMG,EAAmB,IAAIC,EAAgB,IAAI7G,aAAaqG,GAAoB,GAC5E1Y,EAAkBC,GAAoBC,sBAAsBuY,GAIlE,OAHAzY,EAAgBlG,aAAa,mBAAoBmf,GAEjD59B,KAAKk9B,QAAQxyB,KAAK,IAAI4uB,GAAc3U,EAAiB2Y,IAC9Ct9B,KAAKk9B,QAAQl9B,KAAKk9B,QAAQl0B,OAAS,EAC3C,CAED,mBAAAkzB,CAAoBv5B,GAElB,IAAK,IAAI2H,EAAI,EAAGA,EAAItK,KAAKk9B,QAAQl0B,OAAQsB,IAEvCtK,KAAKk9B,QAAQ5yB,GAAG4xB,oBAAoBv5B,EAAU,EAEjD,CAED,eAAA66B,CAAgBM,EAAKR,GAEnB,IAAK,IAAIhzB,EAAI,EAAGA,EAAIgzB,EAAgBA,EAAgB,EAAGhzB,IAErDwzB,EAAIpzB,KAAK,EAEZ,GC8BE,MAACqzB,GAAK,IAlFX,MAEE,IAAAj7B,CAAKk7B,GAEHh+B,KAAKg+B,MAAQA,EACbh+B,KAAKi+B,YAAc,GACnBj+B,KAAKk+B,oBAAsB,IAAI9+B,EAC/BY,KAAKm+B,SAAW,IAAIhb,EACpBnjB,KAAKm+B,SAASC,uBAAwB,EACtCp+B,KAAKm+B,SAAS1V,eAAgB,EAE9BzoB,KAAKq+B,SAAW,IAAIlb,EACpBnjB,KAAKq+B,SAASD,uBAAwB,EACtCp+B,KAAKq+B,SAAS5V,eAAgB,EAE9BzoB,KAAKs+B,UAAY,IAAIvP,GAAoB,EAAG,EAAG,GAAI,GAAI,IAAK,IAC7D,CAED,cAAAwP,CAAeC,GAEb,MAAM/B,EAAQz8B,KAAKi+B,YAAYr6B,QAAQ46B,GACnC/B,GAAS,GAEXz8B,KAAKi+B,YAAY74B,OAAOq3B,EAAO,GAGjCz8B,KAAKm+B,SAAS5xB,OAAOiyB,GACrBx+B,KAAKq+B,SAAS9xB,OAAOiyB,GAErBA,EAAKhgC,SACN,CAED,wBAAAigC,CAAyBD,GAEvBx+B,KAAKi+B,YAAYvzB,KAAK8zB,GACtBx+B,KAAKm+B,SAAS7xB,IAAIkyB,GAElBA,EAAKE,oCACN,CAED,uBAAAC,CAAwBH,GAEtBx+B,KAAKi+B,YAAYvzB,KAAK8zB,GACtBx+B,KAAKq+B,SAAS/xB,IAAIkyB,GAElBA,EAAKI,mCACN,CAED,MAAAzgC,GAME6B,KAAKs+B,UAAUjL,yBAEfrzB,KAAKk+B,oBAAoB/W,KAAKnnB,KAAKg+B,MAAMa,KACzC,IAAK,IAAIv0B,EAAI,EAAGA,EAAItK,KAAKi+B,YAAYj1B,OAAQsB,IAE3CtK,KAAKi+B,YAAY3zB,GAAGw0B,aAAa9+B,KAAKk+B,oBAEzC,CAED,MAAAz7B,CAAOE,GAGD3C,KAAKm+B,SAASza,SAAS1a,OAAS,GAElC+1B,GAASt8B,OAAOzC,KAAKm+B,SAAUn+B,KAAKs+B,WAElCt+B,KAAKq+B,SAAS3a,SAAS1a,OAAS,GAElC+1B,GAASt8B,OAAOzC,KAAKq+B,SAAUhT,GAAcrX,QAEhD,CAED,KAAAiJ,GAEEjd,KAAKg/B,6BAA0B9+B,CAChC,GCnFH,MAAM++B,GAEJ,WAAAtgC,GAEEqB,KAAK+pB,OAAS,IAAI/F,CACnB,CAED,UAAAkb,CAAW7wB,EAAQ8wB,EAAmBC,EAActY,GAElD9mB,KAAK+pB,OAAOzH,cAAcjU,GAE1B,MAAMgxB,EAAQryB,GAAM2C,SAASyvB,EAAe,GACtCE,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAASvY,GAAW,EAEpD2Y,EAAkBz/B,KAAK0/B,oBAAoBP,EAAmBE,GAC9DM,EAAoB3/B,KAAK4/B,sBAAsBT,EAAmBE,GAClEQ,EAAoB7/B,KAAK8/B,sBAAsBX,EAAmBG,GAClES,EAAqB//B,KAAKggC,uBAAuBb,EAAmBG,GAEpEW,EAAqB,IAAIje,EAAQ,EAAG,GAAI,GAAGke,gBAAgBf,GAE3DgB,EAAgBngC,KAAK+pB,OAAOzZ,OAAOhI,QAEnC83B,EAAqBpgC,KAAKqgC,yBAA8C,EAArBrgC,KAAK+pB,OAAO/J,OAAiC,EAArBhgB,KAAK+pB,OAAO/J,OAAYof,EAActY,GACjHwZ,EAAUH,EAAc73B,QAAQgE,IAAI2zB,EAAmB33B,QAAQiI,gBAAqC,EAAtB6vB,IAE9EG,GAAc,IAAIC,GAAQC,8BAA8BhB,EAAiBa,GACzEI,GAAc,IAAIF,GAAQC,8BAA8Bd,EAAmBW,GAE3EK,GAAe,IAAIH,GAAQC,8BAA8BZ,EAAmBS,GAC5EM,GAAe,IAAIJ,GAAQC,8BAA8BV,EAAoBO,GAEnFtgC,KAAK6gC,+BAA+BP,EAASjyB,EAAQ8wB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAE1GL,EAASE,8BAA8BhB,EAAiBa,GACxDI,EAAWD,8BAA8Bd,EAAmBW,GAE5DK,EAAWF,8BAA8BZ,EAAmBS,GAC5DM,EAAYH,8BAA8BV,EAAoBO,GAE9D,IAAIQ,EAAmB7sB,IAEvB,MAAM8sB,EAAcd,EAAmB33B,QAAQiI,gBAAqC,EAAtB6vB,GAC9D,IAAK,IAAI91B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE,MAAMke,EAAO,IAAIwY,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAIy0B,IAE1DE,EAAwB,IAAIjf,EAC5Bkf,EAAyB,IAAIlf,EAE7Bmf,EAA0B,IAAInf,EAC9Bof,EAA0B,IAAIpf,EAEpCue,EAASc,cAAc7Y,EAAOyY,GAC9BP,EAAWW,cAAc7Y,EAAM0Y,GAE/BP,EAAWU,cAAc7Y,EAAO2Y,GAChCP,EAAYS,cAAc7Y,EAAM4Y,GAE5BH,EAAqBj4B,SAAW,MAElCnC,QAAQ8M,IAAI,4BAA6BrJ,GAEvC42B,EAAuBl4B,SAAW,MAEpCnC,QAAQ8M,IAAI,8BAA+BrJ,GAEzC62B,EAAuBn4B,SAAW,MAEpCnC,QAAQ8M,IAAI,8BAA+BrJ,GAEzC82B,EAAwBp4B,SAAW,MAErCnC,QAAQ8M,IAAI,+BAAgCrJ,GAG9C,MAAMg3B,EAAoBjzB,EAAO/D,GAAGhC,QAAQ0gB,IAAIiY,GAAsBj4B,SAChEu4B,EAAoBlzB,EAAO/D,GAAGhC,QAAQ0gB,IAAIkY,GAAwBl4B,SAElEw4B,EAAsBnzB,EAAO/D,GAAGhC,QAAQ0gB,IAAImY,GAAwBn4B,SACpEy4B,EAAsBpzB,EAAO/D,GAAGhC,QAAQ0gB,IAAIoY,GAAyBp4B,SAErE04B,EAAkB3zB,KAAKR,IAAI+zB,EAAiBC,GAC5CI,EAAkB5zB,KAAKR,IAAIi0B,EAAmBC,GAE9Cl0B,EAAMQ,KAAKR,IAAIm0B,EAAcC,GAE/Bp0B,EAAMuzB,IAERA,EAAmBvzB,EAEtB,CAED,MAAMq0B,EAAqB3B,EAAmB33B,QAAQiI,eAAeuwB,GAGrE,OAFyBR,EAAQh4B,QAAQgE,IAAIs1B,EAG9C,CAED,8BAAAf,CAA+BgB,EAAYxzB,EAAQ8wB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAEtG,MAAMkB,EAAkB9hC,KAAK+hC,wBAAwB1zB,EAAQqyB,EAAYH,EAAUpB,GAC7E6C,EAAoBhiC,KAAKiiC,0BAA0B5zB,EAAQsyB,EAAYC,EAAazB,GAE1F0C,EAAWv1B,IAAIw1B,GACfD,EAAWv1B,IAAI01B,EAChB,CAED,uBAAAD,CAAwB1zB,EAAQqyB,EAAYH,EAAUpB,GAEpD,IAAI+C,EAA+BjuB,IAC/BkuB,EAAkCluB,IAItC,MAAMmuB,EAAS,IAAIpgB,EAAQ,EAAG,EAAG,GAAGke,gBAAgBf,GACpD,IAAK,IAAI70B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE,MAAM+3B,EAAc,IAAIrB,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAI81B,EAAO95B,QAAQiI,gBAAgB,OAChG+xB,EAAc,IAAItB,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAI81B,EAAO95B,QAAQiI,eAAe,OAE/F2wB,EAA0B,IAAIlf,EAC9Bif,EAAuB,IAAIjf,EAEjC0e,EAAWW,cAAcgB,EAAYnB,GACrCX,EAASc,cAAciB,EAASrB,GAEhC,MAAMsB,EAAcrB,EAAuBnY,WAAW1a,EAAO/D,IACvDk4B,EAAcvB,EAAqBlY,WAAW1a,EAAO/D,IAEvD22B,EAAqBj4B,SAAW,MAElCnC,QAAQ8M,IAAI,qCAAsCrJ,GAEhD42B,EAAuBl4B,SAAW,MAEpCnC,QAAQ8M,IAAI,uCAAwCrJ,GAGlDi4B,EAAYJ,IAEdA,EAAiCI,GAG/BC,EAAUN,IAEZA,EAA+BM,EAGlC,CAED,MAAMC,GAAcP,EAA+BC,GAAkC,EAGrF,OAAOC,EAAO95B,QAAQiI,gBAAgBkyB,EACvC,CAED,yBAAAR,CAA0B5zB,EAAQsyB,EAAYC,EAAazB,GAEzD,IAAIuD,EAAkCzuB,IAClC0uB,EAAkC1uB,IAItC,MAAM2uB,EAAY,IAAI5gB,EAAQ,EAAG,EAAG,GAAGke,gBAAgBf,GAEvD,IAAK,IAAI70B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE,MAAMu4B,EAAa,IAAI7B,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAIs2B,EAAUt6B,QAAQiI,gBAAgB,OAClGuyB,EAAa,IAAI9B,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAIs2B,EAAUt6B,QAAQiI,eAAe,OAEjG4wB,EAA0B,IAAInf,EAC9Bof,EAA0B,IAAIpf,EAEpC2e,EAAWU,cAAcwB,EAAY1B,GACrCP,EAAYS,cAAcyB,EAAY1B,GAEtC,MAAM2B,EAAa5B,EAAuBpY,WAAW1a,EAAO/D,IACtD04B,EAAa5B,EAAwBrY,WAAW1a,EAAO/D,IAEzD62B,EAAuBn4B,SAAW,MAEpCnC,QAAQ8M,IAAI,8BAA+BrJ,GAEzC82B,EAAwBp4B,SAAW,MAErCnC,QAAQ8M,IAAI,+BAAgCrJ,GAG1Cy4B,EAAYJ,IAEdA,EAAiCI,GAG/BC,EAAaN,IAEfA,EAAkCM,EAGrC,CAED,MAAMP,GAAcC,EAAkCC,GAAkC,EAGxF,OAAOC,EAAUt6B,QAAQiI,gBAAgBkyB,EAC1C,CAED,mBAAA/C,CAAoBP,EAAmBE,GAErC,MAAMI,EAAkB,IAAIzd,EAAQ,GAAI,EAAG,GAG3C,OAFAyd,EAAgBS,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,GAAIqd,IACxFI,EAAgBS,gBAAgBf,GACzBM,CACR,CAED,qBAAAG,CAAsBT,EAAmBE,GAEvC,MAAMM,EAAoB,IAAI3d,EAAQ,EAAG,EAAG,GAG5C,OAFA2d,EAAkBO,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,IAAKqd,IAC3FM,EAAkBO,gBAAgBf,GAC3BQ,CACR,CAED,qBAAAG,CAAsBX,EAAmBG,GAEvC,MAAMO,EAAoB,IAAI7d,EAAQ,EAAG,EAAG,GAG5C,OAFA6d,EAAkBK,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,GAAIsd,IAC1FO,EAAkBK,gBAAgBf,GAC3BU,CACR,CAED,sBAAAG,CAAuBb,EAAmBG,GAExC,MAAMS,EAAqB,IAAI/d,GAAS,EAAG,EAAG,GAG9C,OAFA+d,EAAmBG,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,IAAKsd,IAC5FS,EAAmBG,gBAAgBf,GAC5BY,CACR,CAED,wBAAAM,CAAyBphB,EAAOc,EAAQqf,EAActY,GAEpD,MAAMuY,EAASD,EAAe,EAAKrxB,KAAK8B,GAAK,IACvCyvB,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAASvY,GAAW,EAEpDqc,EAAQpjB,EAAShS,KAAKyxB,IAAIH,GAC1B+D,EAAQnkB,EAAQlR,KAAKyxB,IAAIF,GAC/B,OAAOvxB,KAAKP,IAAIO,KAAKqB,IAAIg0B,GAAQr1B,KAAKqB,IAAI+zB,GAC3C,ECxPH,MAAME,GAEJ,WAAA1kC,GAGC,CAED,UAAAugC,CAAW7wB,EAAQ8wB,EAAmBC,EAActY,GAElD,MAAMwc,EAAsBnE,EAAkB72B,QAAQi7B,UAEhDC,EAAkB,GAExB,IAAK,IAAIl5B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IAEjCk5B,EAAgB94B,KAAK2D,EAAO/D,GAAGhC,QAAQ43B,gBAAgBoD,IAGzD,MAAM7Z,GAAM,IAAIC,GAAOpH,cAAckhB,GAC/Bp9B,EAAO,IAAI4b,EACjByH,EAAI+F,QAAQppB,GAEZ,MAAM8N,EAAWlU,KAAKqgC,yBAAyBj6B,EAAKiJ,EAAI,EAAGjJ,EAAKkJ,EAAI,EAAG8vB,EAActY,GAE/ExW,EAAS,IAAI0R,EAKnB,OAJAyH,EAAIga,UAAUnzB,GAEdA,EAAO4vB,gBAAgBf,GAEhB,CACL7uB,OAAQA,EACRozB,mBAAoBxvB,EAEvB,CAED,wBAAAmsB,CAAyBphB,EAAOc,EAAQqf,EAActY,GAEpD,MAAMuY,EAASD,EAAe,EAAKrxB,KAAK8B,GAAK,IACvCyvB,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAASvY,GAAW,EAEpDqc,EAAQpjB,EAAShS,KAAKyxB,IAAIH,GAC1B+D,EAAQnkB,EAAQlR,KAAKyxB,IAAIF,GAC/B,OAAOvxB,KAAKP,IAAIO,KAAKqB,IAAIg0B,GAAQr1B,KAAKqB,IAAI+zB,GAC3C,ECyOE,MAACQ,GAAmB,IAzQzB,MAEE,IAAA7gC,CAAKk7B,GAEHh+B,KAAK4jC,QAAU,IAAIC,EACnB7jC,KAAKsO,MAAQ,IAAIkyB,EACjBxgC,KAAK8jC,IAAM,IAAIC,EAEf/jC,KAAKgkC,SAAW,IAAIhiB,EACpBhiB,KAAKikC,WAAa,IAAIjiB,EAEtBhiB,KAAKg+B,MAAQA,CACd,CAED,UAAAkG,CAAWzmB,GAETA,EAASA,GAAU4N,GAAcrX,QACjC,MAAMmwB,EAAU,IAAIniB,EAKpB,OAHAmiB,EAAQhiC,IAAI,EAAG,EAAG,GAClBgiC,EAAQjE,gBAAgBziB,EAAOsH,YAExBof,CACR,CAED,eAAAC,CAAgB3mB,GAEdA,EAASA,GAAU4N,GAAcrX,QACjC,MAAMmwB,EAAU,IAAIniB,EAKpB,OAHAmiB,EAAQhiC,IAAI,EAAG,GAAI,GACnBgiC,EAAQjE,gBAAgBziB,EAAOsH,YAExBof,CACR,CAED,aAAAE,CAAc5mB,GAEZA,EAASA,GAAU4N,GAAcrX,QACjC,MAAMmwB,EAAU,IAAIniB,EAIpB,OAFAmiB,EAAQhiC,IAAI,EAAG,EAAG,GAClBgiC,EAAQjE,gBAAgBziB,EAAOsH,YACxBof,CACR,CAED,wBAAAG,CAAyBzF,EAAKphB,GAE5BA,EAASA,GAAU4N,GAAcrX,QACjC,MAAMmwB,EAAU,IAAIniB,EAEdqd,EAAS5hB,EAAOoJ,IAAM,EAAK9Y,KAAK8B,GAAK,IACrCyvB,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAAS5hB,EAAOqJ,QAAW,EAE3Dqc,EAAQp1B,KAAKyxB,IAAIH,GAAS5hB,EAAOuJ,IACjCoc,EAAQr1B,KAAKyxB,IAAIF,GAAS7hB,EAAOuJ,IAIvC,OAFAmd,EAAQhiC,IAAIihC,EAAQvE,EAAIxvB,EAAG8zB,EAAQtE,EAAIvvB,GAAImO,EAAOuJ,KAAKa,YAEhDsc,EAAQjE,gBAAgBziB,EAAOsH,WACvC,CAED,sBAAAwf,CAAuBC,EAAgBC,EAAc5F,EAAKphB,GAExDA,EAASA,GAAU4N,GAAcrX,QACjC6qB,EAAMA,GAAO7+B,KAAKg+B,MAAMa,IAExB,MAAMsF,EAAU,IAAIniB,EAcpB,OAZAhiB,KAAKsO,MAAMmyB,8BAA8BgE,GAAgBzkC,KAAKokC,gBAAgB3mB,GAAS+mB,GACnF/mB,EAAOinB,oBAET1kC,KAAK8jC,IAAI3hC,IAAIsb,EAAO0H,SAAUnlB,KAAKskC,yBAAyBzF,EAAKphB,KAIjEzd,KAAKikC,WAAW9hC,IAAI08B,EAAIxvB,EAAGwvB,EAAIvvB,EAAG,GAAGq1B,UAAUlnB,GAC/Czd,KAAK8jC,IAAI3hC,IAAIsb,EAAO0H,SAAUnlB,KAAKikC,aAGrCjkC,KAAK8jC,IAAIc,eAAe5kC,KAAKsO,MAAO61B,GAC7BA,CACR,CAED,oBAAAU,CAAqBx2B,EAAQy2B,EAAa,GAExC,MACMC,GADgB,IAAI/gB,GAAS1B,cAAcjU,GACRiC,OACnC00B,EAAiBhlC,KAAKokC,gBAAgB/Y,GAAcrX,SAAS1L,QAE7DgG,GAAQ,IAAIkyB,GAAQC,8BAA8BuE,EAAgBD,GAElEv2B,EAAkBxB,GAAMoB,wBAAwBC,EAAQC,GAExD22B,EAA0B,IAAIjjB,EACpC,IAAIyH,GAAO,IAAIC,GAAOpH,cAAc9T,GACpCib,EAAIga,UAAUwB,GAEd,MAAMC,EAAK,IAAIljB,EAAQ,EAAG,EAAG,GAAGke,gBAAgB7U,GAAcrX,QAAQ+Q,YAChEogB,EAAQD,EAAG58B,QAAQ88B,MAAMJ,GAAgBnd,YACzC8H,GAAM,IAAIkU,GAAU1hC,IAAIgjC,EAAM91B,EAAG61B,EAAG71B,EAAG21B,EAAe31B,EAAG01B,EAAmB11B,EAChF81B,EAAM71B,EAAG41B,EAAG51B,EAAG01B,EAAe11B,EAAGy1B,EAAmBz1B,EACpD61B,EAAM/0B,EAAG80B,EAAG90B,EAAG40B,EAAe50B,EAAG20B,EAAmB30B,EACpD,EAAM,EAAkB,EAAU,GAE9Bi1B,GAAc,IAAIxB,GAAUyB,WAAW3V,GAC7C,IAAK,IAAIrlB,EAAI,EAAGA,EAAIkE,EAAgBxF,OAAQsB,IAE1CkE,EAAgBlE,GAAGi7B,aAAaF,GAGlC,MAAMj/B,EAAO,IAAI4b,EACjByH,GAAO,IAAIC,GAAOpH,cAAc9T,GAChCib,EAAI+F,QAAQppB,GACZA,EAAKmK,eAAeu0B,GACpB,MAAMU,EAAmB,IAAIxjB,EAG7B,OAFAyH,EAAIga,UAAU+B,GAEP,CACLrgB,SAAU8f,EACVjY,KAAMhtB,KAAKylC,qBAAqBr/B,EAAKiJ,EAAI,EAAGjJ,EAAKkJ,EAAI,GAExD,CAED,oBAAAm2B,CAAqBxmB,EAAOc,GAE1B,MAAMsf,EAAShU,GAAcrX,QAAQ6S,IAAM,EAAK9Y,KAAK8B,GAAK,IACpDyvB,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAAShU,GAAcrX,QAAQ8S,QAAW,EAE1Eqc,EAAQpjB,EAAShS,KAAKyxB,IAAIH,GAC1B+D,EAAQnkB,EAAQlR,KAAKyxB,IAAIF,GAE/B,OAAOvxB,KAAKP,IAAIO,KAAKqB,IAAIg0B,GAAQr1B,KAAKqB,IAAI+zB,GAC3C,CAED,mBAAAuC,CAAoB7a,EAAIpN,GAEtB,GAAIA,EAAOkoB,qBACX,CACE9a,EAAG2E,QAAQxvB,KAAKgkC,UAEhB,MAAM4B,EAAQ5lC,KAAKgkC,SAAS30B,EACtBw2B,EAAQ7lC,KAAKgkC,SAAS10B,EACtBw2B,EAAgBF,EAAQC,EAC9B,OAAIpe,GAAQzB,aAAe8f,EAAgB,EAElCre,GAAQ1H,OAAS8lB,EAIjBpe,GAAQxI,MAAQ2mB,CAE1B,CAED,CAEE,MAAMx/B,EAAO,IAAI4b,EAEjB,OADA6I,EAAG2E,QAAQppB,GACJpG,KAAKylC,qBAAqBr/B,EAAKiJ,EAAGjJ,EAAKkJ,EAC/C,CACF,CAED,mBAAAy2B,CAAoBC,EAAQvoB,GAE1BA,EAASA,GAAU4N,GAAcrX,QACjC,MAAMmwB,EAAU,IAAIniB,EAOpB,OALAgkB,EAAOC,iBAAiB9B,GACxBA,EAAQ+B,QAAQzoB,GAEhB0mB,EAAQ90B,GAAiB,GAAZ80B,EAAQ90B,EAAU,IAAQoY,GAAa,MACpD0c,EAAQ70B,GAAK,GAAiB,GAAZ60B,EAAQ70B,EAAU,KAAQmY,GAAQ1H,OAC7CokB,CACR,CAED,mBAAAgC,CAAoBxd,EAAKlL,GAEvBA,EAASA,GAAU4N,GAAcrX,QACjC,MAAMmwB,EAAU,IAAIniB,EAOpB,OALAmiB,EAAQhd,KAAKwB,GACbwb,EAAQ+B,QAAQzoB,GAEhB0mB,EAAQ90B,GAAiB,GAAZ80B,EAAQ90B,EAAU,IAAQoY,GAAa,MACpD0c,EAAQ70B,GAAK,GAAiB,GAAZ60B,EAAQ70B,EAAU,KAAQmY,GAAQ1H,OAC7CokB,CACR,CAED,iBAAAiC,CAAkB3oB,GAEhBA,EAAO4oB,MAAU5e,GAAQxI,MAAQ,EACjCxB,EAAO0nB,MAAS1d,GAAQxI,MAAQ,EAChCxB,EAAO6oB,IAAS7e,GAAQ1H,OAAS,EACjCtC,EAAO8oB,QAAU9e,GAAQ1H,OAAS,EAClCtC,EAAOqJ,OAASW,GAAQzB,aACxBvI,EAAO4V,wBAAuB,EAC/B,CAED,uBAAAmT,CAAwB/oB,EAAQoN,EAAI/I,EAAQ,GAE1C,MAAMqC,EAAM,IAAInC,EAChBmC,EAAIgD,KAAK0D,EAAGrd,KAAKwb,IAAI6B,EAAGtd,KAExB,MAAMk5B,EAAK5b,EAAGtd,IAAIjF,QAEZo+B,EAAKD,EAAGn+B,QAAQgE,IAAI,IAAI0V,EAAQmC,EAAI9U,EAAG,EAAG,IAC1Cs3B,EAAKF,EAAGn+B,QAAQgE,IAAI,IAAI0V,EAAQ,EAAGmC,EAAI7U,EAAG,IAC1Cs3B,EAAKH,EAAGn+B,QAAQgE,IAAI,IAAI0V,EAAQ,EAAG,EAAGmC,EAAI/T,IAE1Cy2B,EAAKJ,EAAGn+B,QAAQgE,IAAI,IAAI0V,EAAQmC,EAAI9U,EAAG,EAAG8U,EAAI/T,IAC9C02B,EAAKL,EAAGn+B,QAAQgE,IAAI,IAAI0V,EAAQ,EAAGmC,EAAI7U,EAAG6U,EAAI/T,IAC9C22B,EAAKlc,EAAGrd,IAAIlF,QACZ0+B,EAAKP,EAAGn+B,QAAQgE,IAAI,IAAI0V,EAAQmC,EAAI9U,EAAG8U,EAAI7U,EAAG,IACpD,OAAOtP,KAAKk/B,WAAWzhB,EAAQ,CAACgpB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAAKllB,EAClE,CAED,UAAAod,CAAWzhB,EAAQpP,EAAQy2B,EAAa,GAEtC,GAAIrnB,EAAOinB,oBACX,CACE,MAAMzE,EAAqB,IAAIje,EAAQ,EAAG,GAAI,GAAGke,gBAAgBziB,EAAOsH,YAClEkiB,EAAsBhH,EAAmB33B,QAAQiI,gBAAgB,GAEjE22B,EAAS,IAAIjI,GAEbjZ,EAAeyB,GAAQzB,aAEvBmhB,EAAaD,EAAOhI,WAAW7wB,EAAQoP,EAAOsH,WAAYtH,EAAOoJ,IAAMie,EAAY9e,GACnFyD,GAAM,IAAIC,GAAOpH,cAAcjU,GAC/BiC,EAAS,IAAI0R,EACnByH,EAAIga,UAAUnzB,GAEd,MAAM82B,GAA2B,IAAI5G,GAAQC,8BAA8BwG,EAAqB32B,GAE1F+2B,EAAa,IAAItD,EAAIoD,EAAYlH,GAEjCqH,EAAqB,IAAItlB,EAC/BqlB,EAAWzC,eAAewC,EAA0BE,GAIpD,MAAO,CACLta,KAHWma,EAAWpe,WAAWue,GAIjCA,mBAAoBA,EACpBC,gBAAiBJ,EAEpB,CAED,CACE,MACMK,GADS,IAAInE,IACGnE,WAAW7wB,EAAQrO,KAAKynC,mBAAoBhqB,EAAOoJ,IAAMie,EAAYrd,GAAQzB,cAEnGhmB,KAAKsnC,mBAAmBngB,KAAKqgB,EAAOl3B,QACpCtQ,KAAK0nC,eAAiBF,EAAO9D,mBAE7B,MAAMiE,EAAU,IAAI3lB,EAAQ,EAAG,EAAG,GAAGke,gBAAgBziB,EAAOsH,YAC5D,MAAO,CACLiI,KAAMwa,EAAO9D,mBACb4D,mBAAoBE,EAAOl3B,OAC3Bi3B,gBAAiBI,EAAQp3B,eAAei3B,EAAO9D,oBAElD,CACF,GCpOE,MAACkE,GAAc,IAhCpB,MAEE,WAAAjpC,GAEC,CAED,IAAAmE,CAAKk7B,GAEH3S,GAAcvoB,OACd+kC,GAAgB/kC,KAAKk7B,GACrBnL,GAAa/vB,OACbs2B,GAAat2B,OACbglC,GAAgBhlC,OAEhBilC,GAAGjlC,OACHklC,GAAuBllC,OACvBmlC,GAAkBnlC,OAClB2nB,GAAa3nB,OACb2kB,GAAQ3kB,OACRoZ,GAAKpZ,OACLolC,GAAGplC,KAAKk7B,GAERmK,GAAMrlC,MACP,CAED,OAAAtE,GAEEugC,GAASvgC,UACTisB,GAAajsB,SACd,GC5CH,MAAM4pC,GAEJ,IAAAtlC,CAAKqJ,GAEHnM,KAAKqoC,eAAgB,EACrBroC,KAAKsoC,aAAc,EAEnBtoC,KAAK4R,KAAO,GACZ5R,KAAKuoC,UAAY,GACjBvoC,KAAKmM,UAAYA,EAEjBnM,KAAKmM,UAAUq8B,iBAAiB,UAAWxoC,KAAKyoC,YAAYzgC,KAAKhI,OAAO,GACxEA,KAAKmM,UAAUq8B,iBAAiB,QAASxoC,KAAK0oC,UAAU1gC,KAAKhI,OAAO,EACrE,CAED,WAAAyoC,CAAYziC,GAEQ,KAAdA,EAAE2iC,SAAkB3iC,EAAE4iC,UAAY5oC,KAAKsoC,cAEzCtoC,KAAKqoC,eAAgB,EACrBroC,KAAKsoC,aAAc,GAGjBtiC,EAAE6iC,MAEJ7oC,KAAK8oC,UAAU9iC,EAAE6iC,KAEpB,CAED,SAAAH,CAAU1iC,GAERhG,KAAK+oC,YAAY/iC,EAAE6iC,KACpB,CAED,KAAA5rB,GAEEjd,KAAKqoC,eAAgB,EAErB,IAAK,IAAI/9B,EAAI,EAAGA,EAAItK,KAAKuoC,UAAUv/B,OAAQsB,IAEzCtK,KAAK4R,KAAK5R,KAAKuoC,UAAUj+B,IAAI0+B,SAAU,EACvChpC,KAAK4R,KAAK5R,KAAKuoC,UAAUj+B,IAAI2+B,UAAW,CAE3C,CAED,WAAAF,CAAYG,GAEV,MAAMC,EAAMnpC,KAAK4R,KAAKs3B,GAClBC,IAEFA,EAAIC,OAAQ,EACZD,EAAIE,MAAO,EACXF,EAAIF,UAAW,EAElB,CAED,YAAAK,GAEEtpC,KAAKsoC,aAAc,EAEnB,IAAK,IAAIh+B,EAAI,EAAGA,EAAItK,KAAKuoC,UAAUv/B,OAAQsB,IAEzCtK,KAAK4R,KAAK5R,KAAKuoC,UAAUj+B,IAAI8+B,OAAQ,EACrCppC,KAAK4R,KAAK5R,KAAKuoC,UAAUj+B,IAAI++B,MAAO,CAEvC,CAED,SAAAP,CAAUI,GAER,MAAMC,EAAMnpC,KAAK4R,KAAKs3B,GAClBC,KAEe,IAAbA,EAAIE,OAENF,EAAIH,SAAU,GAEhBG,EAAIE,MAAO,EACXF,EAAIC,OAAQ,EAEf,CAED,cAAAG,CAAeL,GAEb,MAAMC,EAAMnpC,KAAK4R,KAAKs3B,GACtB,QAAIC,GAEKA,EAAIH,OAGd,CAED,WAAAQ,CAAYN,GAEV,MAAMC,EAAMnpC,KAAK4R,KAAKs3B,GACtB,QAAIC,GAEKA,EAAIE,IAGd,CAED,eAAAI,CAAgBP,GAEd,MAAMC,EAAMnpC,KAAK4R,KAAKs3B,GACtB,QAAIC,GAEKA,EAAIF,QAId,CAED,YAAAS,CAAaP,GAEXnpC,KAAK4R,KAAKu3B,GACR,CACED,SAAUC,EACVH,SAAS,EACTK,MAAM,EACND,OAAO,GAGXppC,KAAKuoC,UAAY52B,OAAOC,KAAK5R,KAAK4R,KACnC,CAED,cAAA+3B,CAAeT,UAENlpC,KAAK4R,KAAKs3B,EAClB,CAED,OAAA1qC,GAEEwB,KAAKmM,UAAUy9B,oBAAoB,UAAW5pC,KAAKyoC,YAAYzgC,KAAKhI,OAAO,GAC3EA,KAAKmM,UAAUy9B,oBAAoB,QAAS5pC,KAAK0oC,UAAU1gC,KAAKhI,OAAO,EACxE,ECnIH,MAAM+uB,WAA2B8a,EAE/B,WAAAlrC,CAAY0nC,EAAMlB,EAAOmB,EAAKC,EAAQxf,EAAMC,GAE1CjoB,MAAMsnC,EAAMlB,EAAOmB,EAAKC,EAAQxf,EAAMC,GAEtChnB,KAAKinB,YAAc,IAAItmB,EAAM,WAC7BX,KAAKknB,YAAc,CACpB,CAED,IAAAC,CAAK1J,GAKH,OAHA1e,MAAMooB,KAAK1J,GACXzd,KAAKinB,YAAYE,KAAK1J,EAAOwJ,aAC7BjnB,KAAKknB,YAAczJ,EAAOyJ,YACnBlnB,IACR,ECdH,MAAM8pC,WAAuBprC,EAE3B,WAAAC,GAEEI,MAAM,CACJC,SAAU,CACT,EACDM,kLACAC,uHAEH,ECTH,MAAMwqC,WAA2BvnC,GAE/B,WAAA7D,GAEEI,OACD,CAED,MAAA0D,GAEEs8B,GAAS9hB,WAAM/c,EAAWmrB,GAAcrX,SAAS,GAAM,GAEvD+qB,GAASt8B,OAAOgoB,GAAazW,QAASqX,GAAcrX,aAAS9T,EAAW,IAAI4pC,GAC7E,4MCXH,MAAME,WAAqCvrC,GAEzC,WAAAE,GAEEI,i5BAAYkrC,IACZjqC,KAAKhB,SAASuxB,UAAqB,CAAErxB,MAAO,GAC5Cc,KAAKhB,SAASkrC,mBAAqB,CAAEhrC,MAAO,IAAI2kC,EACjD,ECVH,MAAMsG,WAA4B1rC,GAEhC,WAAAE,GAEEI,wPACAiB,KAAKhB,SAASorC,IAAM,CAAElrC,WAAOgB,EAC9B,ECFH,MAAMmqC,WAAqB5rC,GAEzB,WAAAE,GAEEI,o2DAAYuB,IAEZN,KAAKhB,SAASkrC,mBAAqB,CAAEhrC,MAAO,IAAI2kC,GAChD7jC,KAAKhB,SAASsrC,kBAAqB,CAAEprC,MAAO,IAAI2kC,GAEhD7jC,KAAKhB,SAASurC,MAAY,CAAErrC,MAAO,OACnCc,KAAKhB,SAASwrC,QAAY,CAAEtrC,MAAO,IACnCc,KAAKhB,SAASuxB,UAAY,CAAErxB,MAAO,KAEnCc,KAAKhB,SAASyrC,cAAgB,CAAEvrC,MAAOc,KAAK0qC,uBAC5C1qC,KAAKhB,SAAS2rC,gBAAkB,CAAEzrC,MAAOc,KAAK4qC,wBAC/C,CAED,mBAAAF,GAEE,MAAMG,EAAgB,GAGtB,IAAK,IAAIvgC,EAAI,EAAGA,EAFI,GAEaA,IACjC,CACE,MAAM6Z,EAAM,IAAInC,EAAwB,EAAhBjU,KAAK6C,SAAe,EAC1B,EAAhB7C,KAAK6C,SAAe,EACpB7C,KAAK6C,UACPuT,EAAI0D,YACJ,IAAI/F,EAAQxX,EARM,GASlBwX,EAAU9U,GAAMgC,KAAK,GAAK,EAAK8S,EAAQA,GACvCqC,EAAI5T,eAAeuR,GAEnB+oB,EAAcngC,KAAKyZ,EACpB,CACD,OAAO0mB,CACR,CAED,qBAAAD,GAEE,MAAME,EAAkB,IAAIjO,WAAW,IACvC,IAAK,IAAIvyB,EAAI,EAAGA,EAAI,GAAIA,IAEtBwgC,EAAoB,EAAJxgC,EAAQ,GAAKyD,KAAK4C,MAAsB,IAAhB5C,KAAK6C,UAC7Ck6B,EAAoB,EAAJxgC,EAAQ,GAAKyD,KAAK4C,MAAsB,IAAhB5C,KAAK6C,UAC7Ck6B,EAAoB,EAAJxgC,EAAQ,GAAK,EAG/B,MAAMygC,EAAmB,IAAIjO,EAAYgO,EAAiB,EAAG,EAAGtU,GAKhE,OAJAuU,EAAiBC,MAAQC,EACzBF,EAAiBG,MAAQD,EAEzBF,EAAiBlrB,aAAc,EACxBkrB,CACR,ECvDH,MAAMI,WAAwB1sC,GAE5B,WAAAE,GAEEI,6sBACAiB,KAAKhB,SAASosC,WAAa,CAAElsC,MAAO,IAAIE,EACzC,ECPH,MAAMisC,GAEJ,WAAA1sC,CAAYgE,GAEV3C,KAAKsrC,IAAM,IAAI5a,EAAkB,EAAG,GACpC1wB,KAAKurC,IAAM,IAAI7a,EAAkB,EAAG,GACpC1wB,KAAKwrC,aAAe,IAAIL,EACzB,CAED,IAAAM,CAAKxjB,GAECA,EAAGhJ,QAAUjf,KAAKsrC,IAAIrsB,OAASgJ,EAAGlI,SAAW/f,KAAKsrC,IAAIvrB,SAExD/f,KAAKsrC,IAAIxa,QAAQ7I,EAAGhJ,MAAOgJ,EAAGlI,QAC9B/f,KAAKurC,IAAIza,QAAQ7I,EAAGhJ,MAAOgJ,EAAGlI,SAGhC/f,KAAKwrC,aAAaxsC,SAASosC,WAAWlsC,MAAMiD,IAAI,EAAG,GACnD48B,GAAS/P,KAAK/G,EAAIjoB,KAAKsrC,IAAKtrC,KAAKwrC,cACjCxrC,KAAKwrC,aAAaxsC,SAASosC,WAAWlsC,MAAMiD,IAAI,EAAG,GACnD48B,GAAS/P,KAAKhvB,KAAKsrC,IAAKrjB,EAAIjoB,KAAKwrC,aAElC,ECfH,MAAME,WAAuBlpC,GAE3B,WAAA7D,CAAYgtC,GAAW,GAErB5sC,QAEAiB,KAAK4rC,SAAW,IAAIvB,GACpBrqC,KAAK6rC,iBAAmB,IAAI1B,GAC5BnqC,KAAK8rC,cAAgB,IAAI9B,GAEzBhqC,KAAK+rC,KAAOJ,EAAW,EAAI,EAE3B3rC,KAAKgsC,QAAU,IAAItb,EAAkBjJ,GAAQxI,MAAQjf,KAAK+rC,KAAMtkB,GAAQ1H,OAAS/f,KAAK+rC,MAEtF/rC,KAAKisC,QAAU,IAAIvb,EAAkBjJ,GAAQxI,MAAOwI,GAAQ1H,QAE5D/f,KAAKksC,QAAU,IAAIb,GACnBtM,GAASxN,4BAA6B,CACvC,CAED,MAAA9uB,GAEEzC,KAAKmsC,kBAELpN,GAAS9hB,MAAMjd,KAAKgsC,QAAS3gB,GAAcrX,SAAS,GAAM,GAC1D+qB,GAASt8B,OAAOgoB,GAAazW,QAASqX,GAAcrX,QAAShU,KAAKgsC,SAElEhsC,KAAKosC,oBAELrN,GAAS/P,KAAK+P,GAAS7L,iBAAkBlzB,KAAKisC,QAASjsC,KAAK4rC,UAG5D5rC,KAAKksC,QAAQT,KAAKzrC,KAAKisC,SACvBlN,GAAS/P,KAAKhvB,KAAKisC,aAAS/rC,GAG5BF,KAAK6rC,iBAAiB7sC,SAASorC,IAAIlrC,MAAQc,KAAKisC,QAAQ5c,QACxD0P,GAAS/P,KAAKhvB,KAAKgsC,aAAS9rC,EAAWF,KAAK6rC,iBAG7C,CAED,iBAAAO,GAEEpsC,KAAK4rC,SAAS5sC,SAASkrC,mBAAmBhrC,MAAMomC,WAAWja,GAAcrX,QAAQq4B,kBACjFrsC,KAAK4rC,SAAS5sC,SAASsrC,kBAAkBprC,MAAMioB,KAAKkE,GAAcrX,QAAQq4B,kBAC1ErsC,KAAK4rC,SAAS5sC,SAASuxB,UAAUrxB,MAAQmsB,GAAcrX,QAAQgT,GAChE,CAED,eAAAmlB,GAEMnsC,KAAKgsC,QAAQ/sB,QAAUwI,GAAQxI,MAAQjf,KAAK+rC,MAAQ/rC,KAAKgsC,QAAQjsB,SAAW0H,GAAQ1H,OAAS/f,KAAK+rC,OAEpG/rC,KAAKgsC,QAAQlb,QAAQrJ,GAAQxI,MAAQjf,KAAK+rC,KAAMtkB,GAAQ1H,OAAS/f,KAAK+rC,MACtE/rC,KAAKisC,QAAQnb,QAAQrJ,GAAQxI,MAAOwI,GAAQ1H,QAE/C,EC/DH,MAAMusB,WAAqB9pC,GAEzB,WAAA7D,GAEEI,OACD,CAED,MAAA0D,GAEEs8B,GAAS9hB,WAAM/c,EAAWmrB,GAAcrX,SAAS,GAAM,GAEnDyW,GAAazW,QAAQ1V,eAEvBmsB,GAAazW,QAAQ1V,gBAGnBmsB,GAAazW,QAAQvR,OAEvBgoB,GAAazW,QAAQvR,SAIrBs8B,GAASt8B,OAAOgoB,GAAazW,QAASqX,GAAcrX,SAGlDyW,GAAazW,QAAQ3V,gBAEvBosB,GAAazW,QAAQ3V,gBAExB,EC5BH,MAAMkuC,WAA6B9tC,GAEjC,WAAAE,CAAY6tC,GAEVztC,6qBAAYmB,EAAW,CACrBusC,cAAeD,EACfE,MAAOF,IAGTxsC,KAAKhB,SAAS2tC,QAAU,CAAEztC,MAAO,IAAIE,EAAQ,GAAK,KAClDY,KAAKhB,SAAS4tC,UAAY,CAAE1tC,MAAO,IAAIE,EAAQ,GAAK,IACrD,CAED,QAAAytC,CAAS18B,EAAGgW,GAEVnmB,KAAKhB,SAAS2tC,QAAQztC,MAAMmQ,EAAIc,EAChCnQ,KAAKhB,SAAS2tC,QAAQztC,MAAMoQ,EAAI6W,CACjC,CAED,aAAA2mB,CAAcz9B,EAAGC,GAEftP,KAAKhB,SAAS4tC,UAAU1tC,MAAMiD,IAAIkN,EAAGC,EACtC,ECvBH,MAAMy9B,WAAmCtuC,GAEvC,WAAAE,CAAY6tC,GAEVztC,ydAEAiB,KAAKhB,SAASguC,oBAAsB,CAAE9tC,MAAO,KAC7Cc,KAAKhB,SAASiuC,YAAsB,CAAE/tC,MAAO,KAC7Cc,KAAKhB,SAASkuC,aAAsB,CAAEhuC,MAAO,IAAIyB,EAAM,YACvDX,KAAKhB,SAASmuC,eAAsB,CAAEjuC,MAAO,EAC9C,ECTH,MAAMkuC,GAEJ,WAAAzuC,CAAYoB,EAAQ,GAElBC,KAAKqtC,cAAgB,EACrBrtC,KAAKstC,eAAiB,EAEtBttC,KAAKutC,uBAAyB,GAC9BvtC,KAAKwtC,wBAA0B,GAC/BxtC,KAAKytC,sBAAwB,GAE7BztC,KAAKD,MAAQA,EACbC,KAAK0tC,gBAAkB,CAAC,EAAG,EAAG,EAAG,EAAG,IACpC1tC,KAAK2tC,QAAU,CAAEtX,UAAWuX,EAActX,UAAWsX,EAAcrX,OAAQC,GAE3Ex2B,KAAK6tC,mBAAqB,IAAInd,EAAkB,EAAG,EAAG1wB,KAAK2tC,SAC3D3tC,KAAK6tC,mBAAmBxe,QAAQye,iBAAkB,EAElD9tC,KAAK+tC,iBACL/tC,KAAKguC,UAELhuC,KAAKiuC,yBAA2B,IAAIlB,EACrC,CAED,IAAAtB,CAAKxjB,EAAIimB,GAEPluC,KAAKmuC,UAAUlmB,EAAGhJ,MAAOgJ,EAAGlI,QAExBmuB,EAEFnP,GAAS/P,KAAK/G,EAAIjoB,KAAK6tC,mBAAoB7tC,KAAKiuC,0BAIhDlP,GAAS/P,KAAK/G,EAAIjoB,KAAK6tC,oBAGzB,IAAIO,EAAoBpuC,KAAK6tC,mBAE7B,IAAK,IAAIvjC,EAAI,EAAGA,EAAItK,KAAKD,MAAOuK,IAChC,CACE,MAAMqlB,EAAM3vB,KAAKutC,uBAAuBjjC,GAExCqlB,EAAImd,cAAc,EAAG,GACrB/N,GAAS/P,KAAKof,EAAmBpuC,KAAKwtC,wBAAwBljC,GAAIqlB,GAElEA,EAAImd,cAAc,EAAG,GACrB/N,GAAS/P,KAAKhvB,KAAKwtC,wBAAwBljC,GAAItK,KAAKytC,sBAAsBnjC,GAAIqlB,GAE9Eye,EAAoBpuC,KAAKytC,sBAAsBnjC,EAChD,CACF,CAED,mBAAA+jC,GAEE,OAAOruC,KAAKwtC,wBAAwB,GAAGne,OACxC,CAED,cAAAif,GAEE,OAAOtuC,KAAKwtC,wBAAwB,EACrC,CAED,OAAAQ,GAEEhuC,KAAKuuC,aAELvuC,KAAK6tC,mBAAmB/c,QAAQ,EAAG,GAEnC,IAAK,IAAIxmB,EAAI,EAAGA,EAAItK,KAAKD,MAAOuK,IAChC,CACE,MAAMkkC,EAAM,IAAI9d,EAAkB,EAAG,EAAG1wB,KAAK2tC,SACvCc,EAAM,IAAI/d,EAAkB,EAAG,EAAG1wB,KAAK2tC,SAE7Ca,EAAInf,QAAQye,iBAAkB,EAC9BW,EAAIpf,QAAQye,iBAAkB,EAE9B9tC,KAAKwtC,wBAAwB9iC,KAAK8jC,GAClCxuC,KAAKytC,sBAAsB/iC,KAAK+jC,EACjC,CACF,CAED,SAAAN,CAAU7Q,EAAeoR,GAEvB,GAAI1uC,KAAKqtC,gBAAkB/P,GAAiBt9B,KAAKstC,iBAAmBoB,EAElE,OAGF1uC,KAAKqtC,cAAgB/P,EACrBt9B,KAAKstC,eAAiBoB,EAEtB,IAAIzvB,EAAQlR,KAAKC,MAAMsvB,EAAgB,GACnCvd,EAAShS,KAAKC,MAAM0gC,EAAiB,GAEzC1uC,KAAK6tC,mBAAmB/c,QAAQ7R,EAAOc,GAEvC,IAAK,IAAIzV,EAAI,EAAGA,EAAItK,KAAKD,MAAOuK,IAE9BtK,KAAKytC,sBAAsBnjC,GAAGwmB,QAAQ7R,EAAOc,GAC7C/f,KAAKwtC,wBAAwBljC,GAAGwmB,QAAQ7R,EAAOc,GAC/C/f,KAAKutC,uBAAuBjjC,GAAGuiC,SAAS5tB,EAAOc,GAE/Cd,EAAUlR,KAAKC,MAAMiR,EAAQ,GAC7Bc,EAAUhS,KAAKC,MAAM+R,EAAS,EAEjC,CAED,cAAAguB,CAAezQ,EAAeoR,GAE5B1uC,KAAK2uC,oBAEL,IAAK,IAAIrkC,EAAI,EAAGA,EAAItK,KAAKD,MAAOuK,IAE9BtK,KAAKutC,uBAAuB7iC,KAAK,IAAI6hC,GAAqBvsC,KAAK0tC,gBAAgBpjC,IAElF,CAED,iBAAAqkC,GAEE,IAAK,IAAIrkC,EAAI,EAAGA,EAAItK,KAAKutC,uBAAuBvkC,OAAQsB,IAEtDtK,KAAKutC,uBAAuBjjC,GAAG9L,UAEjCwB,KAAKutC,uBAAuBvkC,OAAS,CACtC,CAED,UAAAulC,GAEE,IAAK,IAAIjkC,EAAI,EAAGA,EAAItK,KAAKytC,sBAAsBzkC,OAAQsB,IAErDtK,KAAKwtC,wBAAwBljC,GAAG9L,UAChCwB,KAAKytC,sBAAsBnjC,GAAG9L,UAEhCwB,KAAK6tC,mBAAmBrvC,UAExBwB,KAAKwtC,wBAAwBxkC,OAAS,EACtChJ,KAAKytC,sBAAsBzkC,OAAS,CACrC,ECpIH,MAAM4lC,WAA0BpsC,GAE9B,WAAA7D,GAEEI,QAEAiB,KAAK6uC,uBAAoB3uC,EAEzBF,KAAKgsC,aAAU9rC,EACfF,KAAK8uC,aAAU5uC,EACfF,KAAKksC,aAAUhsC,EAEfF,KAAK+uC,QAAU,IAAIjvC,EACpB,CAED,QAAA9B,GAEEgC,KAAKksC,QAAU,IAAIkB,GACnBptC,KAAKgsC,QAAU,IAAItb,EAAkBjJ,GAAQxI,MAAOwI,GAAQ1H,QAC5D/f,KAAK8uC,QAAU,IAAIpe,EAAkBjJ,GAAQxI,MAAOwI,GAAQ1H,QAE5D/f,KAAK6uC,kBAAoB,IAAIjuC,GAA2B,GACxDZ,KAAKksC,QAAU,IAAIkB,GAAgB,GAEnCptC,KAAK6uC,kBAAkBptC,SAASzB,KAAKksC,QAAQuB,sBAAsB,GAAGpe,SACtErvB,KAAK6uC,kBAAkBltC,SAAS3B,KAAKksC,QAAQuB,sBAAsB,GAAGpe,SACtErvB,KAAK6uC,kBAAkBjtC,SAAS5B,KAAKksC,QAAQuB,sBAAsB,GAAGpe,SACtErvB,KAAK6uC,kBAAkBhtC,SAAS7B,KAAKksC,QAAQuB,sBAAsB,GAAGpe,SACtErvB,KAAK6uC,kBAAkB/sC,SAAS9B,KAAKksC,QAAQuB,sBAAsB,GAAGpe,SAEtErvB,KAAK6uC,kBAAkB9sC,mBAAmB,GAC1C/B,KAAK6uC,kBAAkB7sC,iBAAiB,GAExChC,KAAK+uC,QAAQ5uC,gBAAgBH,KAAKksC,QAAQsB,wBAAwB,GAAGne,QACtE,CAED,kBAAAttB,CAAmBitC,GAEjBhvC,KAAK6uC,kBAAkB9sC,mBAAmBitC,EAC3C,CAED,gBAAAhtC,CAAiBgtC,GAEfhvC,KAAK6uC,kBAAkB7sC,iBAAiBgtC,EACzC,CAED,gBAAA/sC,CAAiBC,GAEflC,KAAK6uC,kBAAkB5sC,iBAAiBC,EACzC,CAED,gBAAAE,CAAiBF,GAEflC,KAAK6uC,kBAAkBzsC,iBAAiBF,EACzC,CAED,gBAAAG,CAAiBH,GAEflC,KAAK6uC,kBAAkBxsC,iBAAiBH,EACzC,CAED,gBAAAI,CAAiBJ,GAEflC,KAAK6uC,kBAAkBvsC,iBAAiBJ,EACzC,CAED,gBAAAK,CAAiBL,GAEflC,KAAK6uC,kBAAkBtsC,iBAAiBL,EACzC,CAED,MAAAO,GAEEzC,KAAKmsC,kBAELpN,GAAS9hB,MAAMjd,KAAKgsC,QAAS3gB,GAAcrX,SAAS,GAAM,GAC1D+qB,GAASt8B,OAAOgoB,GAAazW,QAASqX,GAAcrX,QAAShU,KAAKgsC,SAGlEhsC,KAAKksC,QAAQT,KAAKzrC,KAAKgsC,SAAS,GAGhCjN,GAASrP,cAAc1vB,KAAK6uC,kBAAmB7uC,KAAKksC,QAAQsB,wBAAwB,IAGpFzO,GAAS/P,KAAKhvB,KAAKgsC,aAAS9rC,EAAWF,KAAK+uC,QAC7C,CAED,eAAA5C,GAEMnsC,KAAKgsC,QAAQ/sB,QAAUwI,GAAQxI,OAASjf,KAAKgsC,QAAQjsB,SAAW0H,GAAQ1H,SAE1E/f,KAAKgsC,QAAQlb,QAAQrJ,GAAQxI,MAAOwI,GAAQ1H,QAC5C/f,KAAK8uC,QAAQhe,QAAQrJ,GAAQxI,MAAOwI,GAAQ1H,QAE/C,ECtGH,MAAMkvB,WAAiBzsC,GAErB,WAAA7D,GAEEI,OACD,CAED,MAAA0D,GAIMgoB,GAAazW,QAAQ1V,eAEvBmsB,GAAazW,QAAQ1V,gBAGnBmsB,GAAazW,QAAQvR,OAEvBgoB,GAAazW,QAAQvR,SAIrBs8B,GAASt8B,OAAOgoB,GAAazW,QAASqX,GAAcrX,QAAS+qB,GAAS5N,UAAUnB,mBAGlFhwB,KAAKkvC,0BAEDzkB,GAAazW,QAAQ3V,gBAEvBosB,GAAazW,QAAQ3V,gBAExB,CAED,uBAAA6wC,GAEE,MAAMC,EAAmB9jB,GAAc3N,UAEvC,GAAIyxB,GAAoBpQ,GAAS5N,UAAUoB,GAAG6c,aAC9C,CAGE,MAAMC,EAAQtQ,GAAS5N,UAAUoB,GAAG+c,UAAUjkB,GAAcrX,SAE5Dm7B,EAAiB9C,iBAAiBllB,KAAKkE,GAAcrX,QAAQq4B,kBAE7D8C,EAAiBhqB,SAASgC,KAAKkoB,EAAMlqB,UACrCgqB,EAAiBpqB,WAAWoC,KAAKkoB,EAAMtqB,YAGvC,MAAMwqB,EAAsBxQ,GAAS5N,UAAUnB,kBAG/C+O,GAAS5N,UAAUoB,GAAG6c,cAAe,EAGrCrQ,GAAS5N,UAAUlB,gBAAgB,MACnC8O,GAAS5N,UAAU1uB,OAAOgoB,GAAazW,QAASm7B,GAGhDpQ,GAAS5N,UAAUlB,gBAAgBsf,GACnCxQ,GAAS5N,UAAUoB,GAAG6c,cAAe,CACtC,CACF,ECVH,MAAMI,GAAoC,IAvD1C,MAEE,WAAA7wC,GAEEqB,KAAKyvC,sBAAwB,GAC7BzvC,KAAK0vC,8BAAgC,IAAIC,GAC1C,CAED,MAAAxxC,GAEE6B,KAAK4vC,wCAEL,IAAK,MAAMC,KAAwB7vC,KAAK0vC,8BAEtCG,EAAqB1xC,OAAOqe,GAAkBb,mBAEjD,CAED,6BAAAm0B,CAA8BD,GAE5B7vC,KAAKyvC,sBAAsB/kC,KAAKmlC,EACjC,CAED,2BAAAE,CAA4BF,GAE1B7vC,KAAK0vC,8BAA8BpjC,IAAIujC,EACxC,CAED,4BAAAG,CAA6BH,GAE3B7vC,KAAK0vC,8BAA8BO,OAAOJ,EAC3C,CAED,GAAAjnC,CAAIsnC,GAEF,IAAK,IAAI5lC,EAAI,EAAGA,EAAItK,KAAKyvC,sBAAsBzmC,OAAQsB,IAErD,GAAItK,KAAKyvC,sBAAsBnlC,GAAGvG,OAASmsC,EAEzC,OAAOlwC,KAAKyvC,sBAAsBnlC,GAGtCzD,QAAQM,MAAM,2EAA4E+oC,EAE3F,CAED,qCAAAN,GAEE,IAAK,IAAItlC,EAAI,EAAGA,EAAItK,KAAKyvC,sBAAsBzmC,OAAQsB,IAErDtK,KAAKyvC,sBAAsBnlC,GAAGkC,YAAYgQ,GAAkBb,mBAE/D,GC9CH,MAAMw0B,GAEJ,WAAAxxC,CAAYyxC,EAAoBhlB,GAE9BglB,EAAqBA,GAAsB,IAAItyC,GAE/CkC,KAAKowC,mBAAqBA,EAC1BpwC,KAAKorB,SAAWA,EAEhBprB,KAAKqwC,YAAa,EAClBrwC,KAAKswC,cAAgB,EAErBtwC,KAAKuwC,iBAAmB,CACzB,CAED,MAAApyC,GAEE,GAAK6B,KAAKqwC,WAAV,CAkBA,IAbAn0B,GAAKhB,WAGsB,IAAvBlb,KAAKswC,eAEPtwC,KAAKowC,mBAAmBryC,gBAG1BiC,KAAKuwC,kBAAoBr0B,GAAK/J,WAE9BnS,KAAKowC,mBAAmBlyC,gBACxBse,GAAkBte,gBAEX8B,KAAKuwC,iBAAmBr0B,GAAKxB,kBAElC1a,KAAKowC,mBAAmBhyC,eACxBoe,GAAkBpe,eAElB4B,KAAKuwC,kBAAoBr0B,GAAKxB,iBAGhCwB,GAAKjB,0BAA0Bjb,KAAKuwC,iBAAmBr0B,GAAKxB,kBAE5D1a,KAAKowC,mBAAmBjyC,SAExBqe,GAAkBre,SAClBif,GAAUjf,SACVqyC,GAA+BryC,SAE/B6B,KAAKowC,mBAAmB9xC,gBAExB0B,KAAKorB,SAASjtB,SACd+pC,GAAG/pC,SACH+pC,GAAGzlC,OAAOzC,KAAKorB,UAEfprB,KAAKowC,mBAAmB/xC,iBAExB8pC,GAAM1lC,OAAOzC,KAAKorB,UAIlBprB,KAAKowC,mBAAmB7xC,eAExByB,KAAKswC,gBAELpI,GAAGjrB,QACHkrB,GAAMlrB,OAhDL,CAiDF,CAED,KAAAzR,GAEMxL,KAAKqwC,aAEkB,IAAvBrwC,KAAKswC,eAEPtwC,KAAKowC,mBAAmBpyC,WAG1BgC,KAAKqwC,YAAa,EAElBrwC,KAAKorB,SAAS+F,UAAUsf,iBAAiBzwC,KAAK7B,OAAO6J,KAAKhI,OAC3D,CAED,IAAA+R,IAE0B,IAApB/R,KAAKqwC,aAETrwC,KAAKqwC,YAAa,EAClBrwC,KAAKowC,mBAAmBnyC,UAExB+B,KAAKorB,SAAS+F,UAAUsf,iBAAiB,MAC1C,CAED,SAAAz0B,CAAUmX,GAERnzB,KAAKowC,mBAAmBnyC,QAAQ+B,MAChCA,KAAKowC,mBAAqBjd,EAC1BnzB,KAAKowC,mBAAmBpyC,SAASgC,KAClC,CAED,OAAAxB,GAEEwB,KAAK+R,OACL/R,KAAKswC,cAAgB,CACtB,ECzDE,MAACI,GAAyB,IAvD/B,MAEE,WAAA/xC,GAEEqB,KAAK2wC,WAAa,GAClB3wC,KAAK4wC,mBAAqB,IAAIjB,GAC/B,CAED,MAAAxxC,GAEE6B,KAAK6wC,6BAEL,IAAK,MAAMC,KAAa9wC,KAAK4wC,mBAE3BE,EAAU3yC,OAAOqe,GAAkBb,mBAEtC,CAED,kBAAAo1B,CAAmBD,GAEjB9wC,KAAK2wC,WAAWjmC,KAAKomC,EACtB,CAED,gBAAAE,CAAiBF,GAEf9wC,KAAK4wC,mBAAmBtkC,IAAIwkC,EAC7B,CAED,iBAAAG,CAAkBH,GAEhB9wC,KAAK4wC,mBAAmBX,OAAOa,EAChC,CAED,GAAAloC,CAAIsnC,GAEF,IAAK,IAAI5lC,EAAI,EAAGA,EAAItK,KAAK2wC,WAAW3nC,OAAQsB,IAE1C,GAAItK,KAAK2wC,WAAWrmC,GAAGvG,OAASmsC,EAE9B,OAAOlwC,KAAK2wC,WAAWrmC,GAG3BzD,QAAQM,MAAM,sDAAuD+oC,EAEtE,CAED,0BAAAW,GAEE,IAAK,IAAIvmC,EAAI,EAAGA,EAAItK,KAAK2wC,WAAW3nC,OAAQsB,IAE1CtK,KAAK2wC,WAAWrmC,GAAGkC,YAAYgQ,GAAkBb,mBAEpD,GCpDH,MAAMu1B,GAEJ,WAAAvyC,EAAYoF,KAAEA,EAAIoI,UAAEA,IAElBnM,KAAK+D,KAAOA,EACZ/D,KAAKmM,UAAYA,EAIjBglC,GAAqBJ,mBAAmB/wC,KACzC,CAED,KAAAwL,GAEC,CAED,QAAAxN,GAEEgC,KAAKmM,UAAUE,UAAUE,OAAO,UAIhC4kC,GAAqBH,iBAAiBhxC,KACvC,CAED,MAAA7B,GAEC,CAED,OAAAF,GAEE+B,KAAKmM,UAAUE,UAAUC,IAAI,UAI7B6kC,GAAqBF,kBAAkBjxC,KACxC,CAED,WAAAwM,CAAYC,GAEVzM,KAAKmM,UAAUO,MAAMD,QAAUA,CAChC,ECxCH,MAAM2kC,GAEJ,WAAAzyC,EAAYoF,KAAEA,IAEZ/D,KAAK+D,KAAOA,EAEZ/D,KAAKmd,gBAAkB,EACvBnd,KAAKqxC,QAAS,EAEdb,GAA+BV,8BAA8B9vC,KAC9D,CAED,KAAAwL,GAEC,CAED,QAAAxN,GAEEwyC,GAA+BT,4BAA4B/vC,MAC3Dqd,GAAa3S,KAAK,GAAG1K,KAAK+D,2BAE1B/D,KAAKqxC,QAAS,CACf,CAED,MAAAlzC,GAEEkf,GAAa3S,KAAK,GAAG1K,KAAK+D,wBAC3B,CAED,OAAA9F,GAEEuyC,GAA+BR,6BAA6BhwC,MAC5Dqd,GAAa3S,KAAK,GAAG1K,KAAK+D,0BAE1B/D,KAAKqxC,QAAS,CACf,CAED,WAAA7kC,CAAYmP,GAEV,MAAMlP,EAAUkP,EAAmB,GAAG3b,KAAK+D,iBAEvC/D,KAAKmd,gBAAkB1Q,GAAWzM,KAAKmd,gBAAkB1Q,KAE3DzM,KAAKmd,gBAAkB1Q,EAEvB4Q,GAAa3S,KAAK,GAAG1K,KAAK+D,6BAA8B,CAAC0I,IACzDzM,KAAKsxC,gBAER,CAED,aAAAA,GAEMtxC,KAAKmd,gBAAkB,KAErBnd,KAAKqxC,QAEPrxC,KAAKhC,WAKFgC,KAAKqxC,QAERrxC,KAAK/B,SAGV,ECjEH,MAAMszC,WAAwB3tB,EAE5B,WAAAjlB,CAAYsgB,EAAOc,EAAQoC,EAAOsB,GAEhCxE,EAAQA,GAAS,EACjBc,EAASA,GAAU,EACnBoC,EAAQA,GAAS,UACjBsB,EAAWA,GAAY,IAAIM,EAAkB,CAAE5B,MAAOA,IAEtD,MAAMqB,EAAW,IAAI2F,EAAclK,EAAOc,GAC1CyD,EAASsB,SAAQ,MACjB/lB,MAAMykB,EAAUC,EACjB,ECZH,MAAM+tB,WAAsB5tB,EAE1B,WAAAjlB,CAAYsgB,EAAOc,EAAQoC,EAAOsB,GAEhCxE,EAAQA,GAAS,EACjBc,EAASA,GAAU,EACnBoC,EAAQA,GAAS,UACjBsB,EAAWA,GAAY,IAAIM,EAAkB,CAAE5B,MAAOA,IAGtDpjB,MADiB,IAAIoqB,EAAclK,EAAOc,GAC1B0D,EACjB,ECfH,MAAMguB,GAEJ,WAAA9yC,GACE,CAEF,oBAAO+yC,CAAcC,EAAQ9iC,GAE3BA,EAAOnE,KAAKknC,MAAM/iC,EAAQ8iC,EAC3B,CAED,wBAAOE,CAAkBC,EAAO1rC,GAE9B,MAAM2rC,EAAmB3rC,EAAO0rC,EAAM9oC,OAEtC,IAAK,IAAIsB,EAAI,EAAGA,EAAIynC,EAAkBznC,IAEpCwnC,EAAMpnC,KAAKonC,EAAMxnC,GAAGhC,QAEvB,CAED,kBAAO0pC,CAAYF,EAAOtT,GAExB,MAAM/B,EAAQqV,EAAMluC,QAAQ46B,GACxB/B,GAAS,GAEXqV,EAAM1sC,OAAOq3B,EAAO,EAEvB,CAED,wBAAOwV,CAAkB5jC,EAAQQ,GAE/B,IAAIqjC,EAAgB7jC,EAAO,GACvByyB,EAAmBoR,EAAcnpB,WAAWla,GAChD,IAAK,IAAIvE,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IAE7B+D,EAAO/D,GAAGye,WAAWla,GAAUiyB,IAEjCoR,EAAgB7jC,EAAO/D,GACvBw2B,EAAmBzyB,EAAO/D,GAAGye,WAAWla,IAG5C,OAAOqjC,CACR,CAED,6BAAOC,CAAuBC,GAE5B,MAAMC,EAAM1gC,OAAOC,KAAKwgC,GAClB3hC,EAAM,GACZ,IAAK,IAAInG,EAAI,EAAGA,EAAI+nC,EAAIrpC,OAAQsB,IAE9BmG,EAAI/F,KAAK0nC,EAAIC,EAAI/nC,KAEnB,OAAOmG,CACR,ECnDH,MAAM6hC,GAEJ,WAAA3zC,GAEEqB,KAAK+pB,OAAS,IAAI/F,CACnB,CAED,UAAAkb,CAAW7wB,EAAQ8wB,EAAmBC,EAActY,GAElD9mB,KAAK+pB,OAAOzH,cAAcjU,GAE1B,MAAMgxB,EAAQtxB,KAAK4B,SAASyvB,EAAe,GACrCE,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAASvY,GAAW,EAEpD2Y,EAAkBz/B,KAAK0/B,oBAAoBP,EAAmBE,GAC9DM,EAAoB3/B,KAAK4/B,sBAAsBT,EAAmBE,GAClEQ,EAAoB7/B,KAAK8/B,sBAAsBX,EAAmBG,GAClES,EAAqB//B,KAAKggC,uBAAuBb,EAAmBG,GAEpEW,EAAqB,IAAIje,EAAQ,EAAG,GAAI,GAAGke,gBAAgBf,GAE3DgB,EAAgBngC,KAAK+pB,OAAOzZ,OAAOhI,QAEnC83B,EAAqBpgC,KAAKqgC,yBAA8C,EAArBrgC,KAAK+pB,OAAO/J,OAAiC,EAArBhgB,KAAK+pB,OAAO/J,OAAYof,EAActY,GACjHwZ,EAAUH,EAAc73B,QAAQgE,IAAI2zB,EAAmB33B,QAAQiI,gBAAqC,EAAtB6vB,IAE9EG,GAAc,IAAIC,GAAQC,8BAA8BhB,EAAiBa,GACzEI,GAAc,IAAIF,GAAQC,8BAA8Bd,EAAmBW,GAE3EK,GAAe,IAAIH,GAAQC,8BAA8BZ,EAAmBS,GAC5EM,GAAe,IAAIJ,GAAQC,8BAA8BV,EAAoBO,GAEnFtgC,KAAK6gC,+BAA+BP,EAASjyB,EAAQ8wB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAE1GL,EAASE,8BAA8BhB,EAAiBa,GACxDI,EAAWD,8BAA8Bd,EAAmBW,GAE5DK,EAAWF,8BAA8BZ,EAAmBS,GAC5DM,EAAYH,8BAA8BV,EAAoBO,GAE9D,IAAIQ,EAAmB7sB,IAEvB,MAAM8sB,EAAcd,EAAmB33B,QAAQiI,gBAAqC,EAAtB6vB,GAC9D,IAAK,IAAI91B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE,MAAMke,EAAO,IAAIwY,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAIy0B,IAE1DE,EAAwB,IAAIjf,EAC5Bkf,EAAyB,IAAIlf,EAE7Bmf,EAA0B,IAAInf,EAC9Bof,EAA0B,IAAIpf,EAEpCue,EAASc,cAAc7Y,EAAOyY,GAC9BP,EAAWW,cAAc7Y,EAAM0Y,GAE/BP,EAAWU,cAAc7Y,EAAO2Y,GAChCP,EAAYS,cAAc7Y,EAAM4Y,GAE5BH,EAAqBj4B,SAAW,MAElCnC,QAAQ8M,IAAI,4BAA6BrJ,GAEvC42B,EAAuBl4B,SAAW,MAEpCnC,QAAQ8M,IAAI,8BAA+BrJ,GAEzC62B,EAAuBn4B,SAAW,MAEpCnC,QAAQ8M,IAAI,8BAA+BrJ,GAEzC82B,EAAwBp4B,SAAW,MAErCnC,QAAQ8M,IAAI,+BAAgCrJ,GAG9C,MAAMg3B,EAAoBjzB,EAAO/D,GAAGhC,QAAQ0gB,IAAIiY,GAAsBj4B,SAChEu4B,EAAoBlzB,EAAO/D,GAAGhC,QAAQ0gB,IAAIkY,GAAwBl4B,SAElEw4B,EAAsBnzB,EAAO/D,GAAGhC,QAAQ0gB,IAAImY,GAAwBn4B,SACpEy4B,EAAsBpzB,EAAO/D,GAAGhC,QAAQ0gB,IAAIoY,GAAyBp4B,SAErE04B,EAAkB3zB,KAAKR,IAAI+zB,EAAiBC,GAC5CI,EAAkB5zB,KAAKR,IAAIi0B,EAAmBC,GAE9Cl0B,EAAMQ,KAAKR,IAAIm0B,EAAcC,GAE/Bp0B,EAAMuzB,IAERA,EAAmBvzB,EAEtB,CAED,MAAMq0B,EAAqB3B,EAAmB33B,QAAQiI,eAAeuwB,GAGrE,OAFyBR,EAAQh4B,QAAQgE,IAAIs1B,EAG9C,CAED,8BAAAf,CAA+BgB,EAAYxzB,EAAQ8wB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAEtG,MAAMkB,EAAkB9hC,KAAK+hC,wBAAwB1zB,EAAQqyB,EAAYH,EAAUpB,GAC7E6C,EAAoBhiC,KAAKuyC,0BAA0BlkC,EAAQsyB,EAAYC,EAAazB,GAE1F0C,EAAWv1B,IAAIw1B,GACfD,EAAWv1B,IAAI01B,EAChB,CAED,uBAAAD,CAAwB1zB,EAAQqyB,EAAYH,EAAUpB,GAEpD,IAEIqT,EACAC,EAHAvQ,EAA+BjuB,IAC/BkuB,EAAkCluB,IAItC,MAAMmuB,EAAS,IAAIpgB,EAAQ,EAAG,EAAG,GAAGke,gBAAgBf,GACpD,IAAK,IAAI70B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE,MAAM+3B,EAAc,IAAIrB,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAI81B,EAAO95B,QAAQiI,gBAAgB,OAChG+xB,EAAc,IAAItB,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAI81B,EAAO95B,QAAQiI,eAAe,OAE/F2wB,EAA0B,IAAIlf,EAC9Bif,EAAuB,IAAIjf,EAEjC0e,EAAWW,cAAcgB,EAAYnB,GACrCX,EAASc,cAAciB,EAASrB,GAEhC,MAAMsB,EAAcrB,EAAuBnY,WAAW1a,EAAO/D,IACvDk4B,EAAcvB,EAAqBlY,WAAW1a,EAAO/D,IAEvD22B,EAAqBj4B,SAAW,MAElCnC,QAAQ8M,IAAI,qCAAsCrJ,GAEhD42B,EAAuBl4B,SAAW,MAEpCnC,QAAQ8M,IAAI,uCAAwCrJ,GAGlDi4B,EAAYJ,IAEdA,EAAiCI,EACjCkQ,EAAqBpkC,EAAO/D,IAE1Bk4B,EAAUN,IAEZA,EAA+BM,EAC/BgQ,EAAmBnkC,EAAO/D,GAE7B,CAEDzD,QAAQ8M,IAAI6+B,EAAkBC,GAE9B,MAAMhQ,GAAcP,EAA+BC,GAAkC,EAGrF,OAAOC,EAAO95B,QAAQiI,gBAAgBkyB,EACvC,CAED,yBAAA8P,CAA0BlkC,EAAQsyB,EAAYC,EAAazB,GAEzD,IAEIuT,EACAC,EAHAjQ,EAAkCzuB,IAClC0uB,EAAkC1uB,IAItC,MAAM2uB,EAAY,IAAI5gB,EAAQ,EAAG,EAAG,GAAGke,gBAAgBf,GAEvD,IAAK,IAAI70B,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE,MAAMu4B,EAAa,IAAI7B,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAIs2B,EAAUt6B,QAAQiI,gBAAgB,OAClGuyB,EAAa,IAAI9B,EAAM3yB,EAAO/D,GAAGhC,QAAS+F,EAAO/D,GAAGhC,QAAQgE,IAAIs2B,EAAUt6B,QAAQiI,eAAe,OAEjG4wB,EAA0B,IAAInf,EAC9Bof,EAA0B,IAAIpf,EAEpC2e,EAAWU,cAAcwB,EAAY1B,GACrCP,EAAYS,cAAcyB,EAAY1B,GAEtC,MAAM2B,EAAa5B,EAAuBpY,WAAW1a,EAAO/D,IACtD04B,EAAa5B,EAAwBrY,WAAW1a,EAAO/D,IAEzD62B,EAAuBn4B,SAAW,MAEpCnC,QAAQ8M,IAAI,8BAA+BrJ,GAEzC82B,EAAwBp4B,SAAW,MAErCnC,QAAQ8M,IAAI,+BAAgCrJ,GAG1Cy4B,EAAYJ,IAEdA,EAAiCI,EACjC4P,EAAqBtkC,EAAO/D,IAE1B04B,EAAaN,IAEfA,EAAkCM,EAClC0P,EAAsBrkC,EAAO/D,GAEhC,CAED,MAAMm4B,GAAcC,EAAkCC,GAAkC,EAKxF,OAFA97B,QAAQ8M,IAAI++B,EAAqBC,GAE1B/P,EAAUt6B,QAAQiI,gBAAgBkyB,EAC1C,CAED,mBAAA/C,CAAoBP,EAAmBE,GAErC,MAAMI,EAAkB,IAAIzd,EAAQ,GAAI,EAAG,GAG3C,OAFAyd,EAAgBS,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,GAAIqd,IACxFI,EAAgBS,gBAAgBf,GACzBM,CACR,CAED,qBAAAG,CAAsBT,EAAmBE,GAEvC,MAAMM,EAAoB,IAAI3d,EAAQ,EAAG,EAAG,GAG5C,OAFA2d,EAAkBO,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,IAAKqd,IAC3FM,EAAkBO,gBAAgBf,GAC3BQ,CACR,CAED,qBAAAG,CAAsBX,EAAmBG,GAEvC,MAAMO,EAAoB,IAAI7d,EAAQ,EAAG,EAAG,GAG5C,OAFA6d,EAAkBK,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,GAAIsd,IAC1FO,EAAkBK,gBAAgBf,GAC3BU,CACR,CAED,sBAAAG,CAAuBb,EAAmBG,GAExC,MAAMS,EAAqB,IAAI/d,GAAS,EAAG,EAAG,GAG9C,OAFA+d,EAAmBG,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,IAAKsd,IAC5FS,EAAmBG,gBAAgBf,GAC5BY,CACR,CAED,wBAAAM,CAAyBphB,EAAOc,EAAQqf,EAActY,GAEpD,MAAMuY,EAASD,EAAe,EAAKrxB,KAAK8B,GAAK,IACvCyvB,EAAS,EAAIvxB,KAAKwxB,KAAKxxB,KAAKyxB,IAAIH,GAASvY,GAAW,EAEpDqc,EAAQpjB,EAAShS,KAAKyxB,IAAIH,GAC1B+D,EAAQnkB,EAAQlR,KAAKyxB,IAAIF,GAC/B,OAAOvxB,KAAKP,IAAIO,KAAKqB,IAAIg0B,GAAQr1B,KAAKqB,IAAI+zB,GAC3C,EC1PH,MAAMyP,GAEJ,sCAAOC,CAAgCC,GAErC,MAAMC,EAAUD,EAAgBrW,MAC1BuW,EAAYF,EAAgBp7B,aAAa,YAGzCu7B,EAAW,GAEjB,IAAK,IAAI3oC,EAAI,EAAGA,EAAIyoC,EAAQpV,MAAOrzB,GAAK,EAGtC2oC,EAASvoC,KAAKsoC,EAAUE,KAAKH,EAAQjB,MAAMxnC,EAAI,KAC/C2oC,EAASvoC,KAAKsoC,EAAUG,KAAKJ,EAAQjB,MAAMxnC,EAAI,KAC/C2oC,EAASvoC,KAAKsoC,EAAUI,KAAKL,EAAQjB,MAAMxnC,EAAI,KAQ/C2oC,EAASvoC,KAAKsoC,EAAUE,KAAKH,EAAQjB,MAAMxnC,EAAI,KAC/C2oC,EAASvoC,KAAKsoC,EAAUG,KAAKJ,EAAQjB,MAAMxnC,EAAI,KAC/C2oC,EAASvoC,KAAKsoC,EAAUI,KAAKL,EAAQjB,MAAMxnC,EAAI,KAQ/C2oC,EAASvoC,KAAKsoC,EAAUE,KAAKH,EAAQjB,MAAMxnC,EAAI,KAC/C2oC,EAASvoC,KAAKsoC,EAAUG,KAAKJ,EAAQjB,MAAMxnC,EAAI,KAC/C2oC,EAASvoC,KAAKsoC,EAAUI,KAAKL,EAAQjB,MAAMxnC,EAAI,KAOjD,MAAMkZ,EAAW,IAAInB,EAIrB,OAFAmB,EAAS/E,aAAa,WAAY,IAAIof,EAAgB,IAAI7G,aAAaic,GAAW,IAClFL,GAAkBS,0BAA0B7vB,GACrCA,CACR,CAED,gCAAO6vB,CAA0BC,GAE/B,MAAMC,EAAkB,GAClBP,EAAYM,EAA4B57B,aAAa,YAE3D,IAAK,IAAIpN,EAAI,EAAGA,EAAI0oC,EAAUrV,MAAOrzB,GAAK,EAExCipC,EAAgB7oC,KAAK,GACrB6oC,EAAgB7oC,KAAK,GACrB6oC,EAAgB7oC,KAAK,GAErB6oC,EAAgB7oC,KAAK,GACrB6oC,EAAgB7oC,KAAK,GACrB6oC,EAAgB7oC,KAAK,GAErB6oC,EAAgB7oC,KAAK,GACrB6oC,EAAgB7oC,KAAK,GACrB6oC,EAAgB7oC,KAAK,GAEvB4oC,EAA4B70B,aAAa,cAAe,IAAIof,EAAgB,IAAI7G,aAAauc,GAAkB,GAChH,ECxEH,MAAMC,GAEJ,kBAAOC,CAAYtnC,GAEjB,MAAMunC,EAASvnC,EAAUiL,iBAAiB,OAE1C,IAAK,IAAI9M,EAAI,EAAGA,EAAIopC,EAAO1qC,OAAQsB,IACnC,CACE,MAAMmc,EAAQitB,EAAOppC,GAEjBmc,EAAMktB,QAAQ1kB,MAEhBxI,EAAMwI,IAAMxI,EAAMktB,QAAQ1kB,IAE7B,CAED,MAAM2kB,EAAgBznC,EAAUiL,iBAAiB,UAEjD,IAAK,IAAI9M,EAAI,EAAGA,EAAIspC,EAAc5qC,OAAQsB,IAC1C,CACE,MAAMupC,EAAeD,EAActpC,GAE/BupC,EAAaF,QAAQ1kB,MAEvB4kB,EAAa3qC,KAAO2qC,EAAaF,QAAQ1kB,IAE5C,CACF,CAED,kBAAO6kB,CAAY3nC,GAEjB,MAAM4nC,EAAS5nC,EAAUiL,iBAAiB,SAE1C,IAAK,IAAI9M,EAAI,EAAGA,EAAIypC,EAAO/qC,OAAQsB,IACnC,CACE,MAAM0pC,EAAQD,EAAOzpC,GAEjB0pC,EAAML,QAAQ1kB,MAEhB+kB,EAAM/kB,IAAM+kB,EAAML,QAAQ1kB,IAE7B,CACF,CAED,mBAAOglB,CAAa9nC,GAElB,MAAM+nC,EAAU/nC,EAAUiL,iBAAiB,UAE3C,IAAK,IAAI9M,EAAI,EAAGA,EAAI4pC,EAAQlrC,OAAQsB,IACpC,CACE,MAAM6pC,EAASD,EAAQ5pC,GAEnB6pC,EAAOR,QAAQ1kB,MAEjBklB,EAAOllB,IAAMklB,EAAOR,QAAQ1kB,IAE/B,CACF,CAED,oBAAOmlB,CAAcjoC,EAAWkoC,GAE9B,MAAMtlC,EAAW5C,EAAUiL,iBAAiBi9B,GAE5C,IAAK,IAAI/pC,EAAI,EAAGA,EAAIyE,EAAS/F,OAAQsB,IACrC,CACE,MAAM2O,EAAUlK,EAASzE,GAErB2O,EAAQ06B,QAAQ1kB,MAElBhW,EAAQgW,IAAMhW,EAAQ06B,QAAQ1kB,IAEjC,CACF,ECtEH,MAAMqlB,GAEJ,WAAA31C,GACG,CAEH,qBAAO41C,CAAe9tB,GAEpB,MAAM3I,EAAS7S,SAAS8S,cAAc,UACtCD,EAAOmB,MAAQwH,EAAMxH,MACrBnB,EAAOiC,OAAS0G,EAAM1G,OAEtB,MAAMrd,EAAUob,EAAOG,WAAW,MAGlC,OAFAvb,EAAQ4yB,UAAU7O,EAAO,EAAG,GAErB/jB,EAAQ8xC,aAAa,EAAG,EAAG/tB,EAAMxH,MAAOwH,EAAM1G,OACtD,CAED,gBAAO00B,CAAUC,EAAWrlC,EAAGC,GAE7B,MAAM6V,EAAuC,GAA3B9V,EAAIqlC,EAAUz1B,MAAQ3P,GAClCpG,EAAOwrC,EAAUxrC,KACvB,OAAO,IAAIkgB,EAAQlgB,EAAKic,EAAW,GAAIjc,EAAKic,EAAW,GAAIjc,EAAKic,EAAW,GAAIjc,EAAKic,EAAW,GAChG,ECoLE,MAACwvB,GAAe,IA1MrB,MAEE,WAAAh2C,GAGC,CAED,MAAAi2C,CAAOjwB,EAAiBkwB,GAEtB,MAAMC,EAAa,GAEnB,IAAIC,EAAW,SAEf,MAAM9B,EAAWtuB,EAAgBjN,aAAa,YACxCs9B,EAAUrwB,EAAgBjN,aAAa,UACvCu9B,EAAWtwB,EAAgBjN,aAAa,WACxComB,EAAMnZ,EAAgBjN,aAAa,MACnCq7B,EAAWpuB,EAAgB8X,MAE3ByY,EAAQ,GAEd,IAAK,IAAI5qC,EAAI,EAAGA,EAAIyoC,EAAQpV,MAAOrzB,GAAK,EACxC,CACE,MAAM6qC,EAAUpC,EAAQjB,MAAMxnC,EAAI,GAC5B8qC,EAAUrC,EAAQjB,MAAMxnC,EAAI,GAC5B+qC,EAAUtC,EAAQjB,MAAMxnC,EAAI,GAE5BgrC,EAAK,IAAItzB,EACfszB,EAAGjmC,EAAI4jC,EAASC,KAAKiC,GACrBG,EAAGhmC,EAAI2jC,EAASE,KAAKgC,GACrBG,EAAGllC,EAAI6iC,EAASG,KAAK+B,GAErB,MAAMI,EAAK,IAAIvzB,EACfuzB,EAAGlmC,EAAI4jC,EAASC,KAAKkC,GACrBG,EAAGjmC,EAAI2jC,EAASE,KAAKiC,GACrBG,EAAGnlC,EAAI6iC,EAASG,KAAKgC,GAErB,MAAMzY,EAAK,IAAI3a,EACf2a,EAAGttB,EAAI4jC,EAASC,KAAKmC,GACrB1Y,EAAGrtB,EAAI2jC,EAASE,KAAKkC,GACrB1Y,EAAGvsB,EAAI6iC,EAASG,KAAKiC,GAErB,MAAMG,EAAO,CACXl9B,EAAGg9B,EACHnnC,EAAGonC,EACHE,EAAG9Y,GAGL,GAAIqY,EACJ,CACE,MAAMx+B,EAAK,IAAIwL,EACfxL,EAAGnH,EAAI2lC,EAAQ9B,KAAKiC,GACpB3+B,EAAGlH,EAAI0lC,EAAQ7B,KAAKgC,GACpB3+B,EAAGpG,EAAI4kC,EAAQ5B,KAAK+B,GAEpB,MAAMO,EAAK,IAAI1zB,EACf0zB,EAAGrmC,EAAI2lC,EAAQ9B,KAAKkC,GACpBM,EAAGpmC,EAAI0lC,EAAQ7B,KAAKiC,GACpBM,EAAGtlC,EAAI4kC,EAAQ5B,KAAKgC,GAEpB,MAAMO,EAAK,IAAI3zB,EACf2zB,EAAGtmC,EAAI2lC,EAAQ9B,KAAKmC,GACpBM,EAAGrmC,EAAI0lC,EAAQ7B,KAAKkC,GACpBM,EAAGvlC,EAAI4kC,EAAQ5B,KAAKiC,GAEpB,MAAMO,EAASp/B,EAAGlO,QAAQgE,IAAIopC,GAAIppC,IAAIqpC,GAAI9tB,YAC1C2tB,EAAKI,OAASA,CACf,CAED,GAAIX,EACJ,CACE,MAAMz+B,EAAK,IAAIwL,EACfxL,EAAGnH,EAAI4lC,EAAS/B,KAAKiC,GACrB3+B,EAAGlH,EAAI2lC,EAAS9B,KAAKgC,GACrB3+B,EAAGpG,EAAI6kC,EAAS7B,KAAK+B,GAErB,MAAMO,EAAK,IAAI1zB,EACf0zB,EAAGrmC,EAAI4lC,EAAS/B,KAAKkC,GACrBM,EAAGpmC,EAAI2lC,EAAS9B,KAAKiC,GACrBM,EAAGtlC,EAAI6kC,EAAS7B,KAAKgC,GAErB,MAAMO,EAAK,IAAI3zB,EACf2zB,EAAGtmC,EAAI4lC,EAAS/B,KAAKmC,GACrBM,EAAGrmC,EAAI2lC,EAAS9B,KAAKkC,GACrBM,EAAGvlC,EAAI6kC,EAAS7B,KAAKiC,GAErB,MAAMQ,EAAUr/B,EAAGlO,QAAQgE,IAAIopC,GAAIppC,IAAIqpC,GAAI9tB,YAC3C2tB,EAAKK,QAAUA,CAChB,CACD,GAAI/X,EACJ,CACE,MAAMgY,EAAO,IAAI12C,EACjB02C,EAAKzmC,EAAIyuB,EAAIoV,KAAKiC,GAClBW,EAAKxmC,EAAIwuB,EAAIqV,KAAKgC,GAElB,MAAMY,EAAO,IAAI32C,EACjB22C,EAAK1mC,EAAIyuB,EAAIoV,KAAKkC,GAClBW,EAAKzmC,EAAIwuB,EAAIqV,KAAKiC,GAElB,MAAMY,EAAO,IAAI52C,EACjB42C,EAAK3mC,EAAIyuB,EAAIoV,KAAKmC,GAClBW,EAAK1mC,EAAIwuB,EAAIqV,KAAKkC,GAElBG,EAAKM,KAAOA,EACZN,EAAKO,KAAOA,EACZP,EAAKQ,KAAOA,CACb,CAEDd,EAAMxqC,KAAK8qC,GAEX,MAAMS,EAAOj2C,KAAKk2C,cAAcV,GAChCT,EAAWhnC,KAAKR,IAAI0oC,EAAMlB,GAC1BD,EAAWpqC,KAAKurC,EACjB,CAED,MAAME,EAAyBn2C,KAAKo2C,8BAA8BtB,EAAYC,EAAUG,GAClFmB,EAAiBr2C,KAAKs2C,oBAAoBH,EAAwBtB,GAExE,OADqB70C,KAAKu2C,uBAAuBF,EAElD,CAED,sBAAAE,CAAuBrB,GAErB,MAAMsB,EAAiB,GACjBC,EAAkB,GAClBC,EAAmB,GACnBC,EAAc,GAEpB,IAAK,IAAIrsC,EAAI,EAAGA,EAAI4qC,EAAMlsC,OAAQsB,IAClC,CACE,MAAMkrC,EAAON,EAAM5qC,GAEbssC,EAAK7oC,KAAK6C,SACVimC,EAAK9oC,KAAK6C,SAEhB4lC,EAAe9rC,KAAK1K,KAAK82C,qBAAqBF,EAAIC,EAAIrB,EAAKl9B,EAAGk9B,EAAKrnC,EAAGqnC,EAAKC,GAAGntC,SAC1EktC,EAAKI,QAEPa,EAAgB/rC,KAAK8qC,EAAKI,OAAOttC,SAE/BktC,EAAKK,SAEPa,EAAiBhsC,KAAK8qC,EAAKK,QAAQvtC,SAEjCktC,EAAKM,MAEPa,EAAYjsC,KAAK1K,KAAK82C,qBAAqBF,EAAIC,EAAIrB,EAAKM,KAAMN,EAAKO,KAAMP,EAAKQ,MAAM1tC,QAEvF,CACD,MAAO,CAAE+F,OAAQmoC,EAAgBxB,QAASyB,EAAiBxB,SAAUyB,EAAkB5Y,IAAK6Y,EAC7F,CAED,mBAAAL,CAAoBpB,EAAO6B,GAEzB,MAAMV,EAAiB,GACvB,IAAK,IAAI/rC,EAAI,EAAGA,EAAIysC,EAAQzsC,IAC5B,CACE,MACM0sC,EAAgB9B,EADPnnC,KAAK4C,MAAM5C,KAAK6C,SAAWskC,EAAMlsC,SAGhDqtC,EAAe3rC,KAAKssC,EACrB,CAED,OAAOX,CACR,CAED,6BAAAD,CAA8BtB,EAAYmC,EAAc/B,GAEtD,MAAMgC,EAA4B,GAClC,IAAK,IAAI5sC,EAAI,EAAGA,EAAIwqC,EAAW9rC,OAAQsB,IACvC,CACEwqC,EAAWxqC,IAAM2sC,EACjB,MAAME,EAAqBppC,KAAK4C,MAAM5C,KAAKC,MAAM8mC,EAAWxqC,KAC5D,IAAK,IAAI8sC,EAAI,EAAGA,EAAID,EAAoBC,IAEtCF,EAA0BxsC,KAAKwqC,EAAM5qC,GAExC,CACD,OAAO4sC,CACR,CAED,aAAAhB,CAAcV,GAEZ,MAAM6B,EAAO7B,EAAKrnC,EAAE7F,QAAQ0gB,IAAIwsB,EAAKl9B,GAC/Bg/B,EAAO9B,EAAKC,EAAEntC,QAAQ0gB,IAAIwsB,EAAKl9B,GACrC,OAAO++B,EAAKjS,MAAMkS,GAAMtuC,SAAW,CACpC,CAED,oBAAA8tC,CAAqBF,EAAIC,EAAIvB,EAAIC,EAAI5Y,GAE/Bia,EAAKC,EAAK,IAEZD,EAAK,EAAMA,EACXC,EAAK,EAAMA,GAGb,MAAMU,EAAK,GAAOX,EAAKC,GAEvB,OAAOvB,EAAGhtC,QAAQiI,eAAeqmC,GAAItqC,IAAIipC,EAAGjtC,QAAQiI,eAAesmC,IAAKvqC,IAAIqwB,EAAGr0B,QAAQiI,eAAegnC,GACvG,GCzCE,MAACC,GAAkB,IA5JxB,MAEE,QAAA9a,CAASrZ,EAAOo0B,GAEdp0B,EAAMC,UAAUC,IAEVA,aAAiBK,IAEfL,EAAMC,WAERD,EAAMC,UAAW,IAAInB,GAAiBq1B,aAAan0B,EAAMC,WAE3Di0B,EAAgBl0B,GACjB,GAEJ,CAED,cAAAo0B,CAAet0B,GAEb,MAAMu0B,EAAa,GAMnB,OAJA53C,KAAK08B,SAASrZ,GAAQE,IAEpBq0B,EAAWltC,KAAK6Y,EAAMC,SAAS,IAE1Bo0B,CACR,CAED,eAAAC,CAAgBx0B,EAAOI,EAAU1f,GAE/Bsf,EAAMC,UAAUC,IAEVA,aAAiBK,SAGN1jB,IAAT6D,GAOEwf,EAAMxf,OAASA,KALnBwf,EAAME,SAAWA,EAUpB,GAEJ,CAED,mBAAAq0B,CAAoBC,GAElB,MAAMzvC,EAAQ,CACZ0vC,WAAYD,EAAKC,WACjB30B,MAAO00B,EAAK10B,MAAM/a,OAAM,IAGpB2vC,EAAgB,CAAA,EAEtBF,EAAK10B,MAAMC,UAAS/L,IAEdA,EAAK2gC,gBAEPD,EAAc1gC,EAAKxT,MAAQwT,EAC5B,IAGH,MAAM4gC,EAAa,CAAA,EACbC,EAAqB,CAAA,EAE3B9vC,EAAM+a,MAAMC,UAAS/L,IAEfA,EAAK8gC,SAEPF,EAAW5gC,EAAKxT,MAAQwT,GAGtBA,EAAK2gC,gBAEPE,EAAmB7gC,EAAKxT,MAAQwT,EACjC,IAGH,IAAK,MAAMxT,KAAQk0C,EACnB,CACE,MACMK,EADcL,EAAcl0C,GACLu0C,SACvBC,EAAmBH,EAAmBr0C,GAEtCy0C,EAAoB,GAE1B,IAAK,IAAIluC,EAAI,EAAGA,EAAIguC,EAASG,MAAMzvC,SAAUsB,EAC7C,CACE,MAAMouC,EAAYP,EAAWG,EAASG,MAAMnuC,GAAGvG,MAC/Cy0C,EAAkB9tC,KAAKguC,EACxB,CAEDH,EAAiBvwC,KACf,IAAI2wC,EAASH,EAAmBF,EAASM,cACzCL,EAAiBM,YACpB,CAED,OAAOvwC,CACR,CAED,iBAAAwwC,CAAkBz1B,EAAO01B,EAAMC,GAE7B31B,EAAMC,UAAUC,IAEVA,aAAiBK,IAEnBL,EAAM01B,WAAaF,EACnBx1B,EAAM21B,cAAgBF,EACvB,GAEJ,CAED,aAAAG,CAAc91B,EAAO4X,EAAawc,GAEhCp0B,EAAMC,UAAU8uB,IAEVA,EAAIruC,OAASk3B,GAEfwc,EAAgBrF,EACjB,GAEJ,CAED,UAAAgH,CAAW/1B,EAAO4X,GAEhB,IAAI+K,EAQJ,OAPA3iB,EAAMC,UAAU8uB,IAEVA,EAAIruC,OAASk3B,IAEf+K,EAASoM,EACV,IAEIpM,CACR,CAED,kBAAAqT,CAAmBh2B,EAAOi2B,GAExB,IAAItT,EAQJ,OAPA3iB,EAAMC,UAAU8uB,IAEVA,EAAIzzC,YAAYoF,OAASu1C,IAE3BtT,EAASoM,EACV,IAEIpM,CACR,GC7JH,MAAMuT,GAEJ,gBAAOC,CAAUC,GAEf,OAAQA,GAAwB,iBAATA,IAAsBC,MAAMC,QAAQF,EAC5D,CAED,iBAAOG,CAAW/qC,KAAWgrC,GAE3B,IAAKA,EAAQ7wC,OAAQ,OAAO6F,EAC5B,MAAM8iC,EAASkI,EAAQx+B,QAEvB,GAAIk+B,GAAgBC,UAAU3qC,IAAW0qC,GAAgBC,UAAU7H,GAEjE,IAAK,MAAMxI,KAAOwI,EAEZ4H,GAAgBC,UAAU7H,EAAOxI,KAE9Bt6B,EAAOs6B,IAAMx3B,OAAOsK,OAAOpN,EAAQ,CAAEs6B,CAACA,GAAM,CAAE,IACnDoQ,GAAgBK,WAAW/qC,EAAOs6B,GAAMwI,EAAOxI,KAI/Cx3B,OAAOsK,OAAOpN,EAAQ,CAAEs6B,CAACA,GAAMwI,EAAOxI,KAK5C,OAAOoQ,GAAgBK,WAAW/qC,KAAWgrC,EAC9C,CAED,kBAAOC,CAAYvgC,GAGjB,IAAI64B,EAAM,CAAA,EAEV,GAAqB,IAAjB74B,EAAIwgC,UAGN,GAAIxgC,EAAIygC,WAAWhxC,OAAS,EAC5B,CACEopC,EAAI,eAAiB,GACrB,IAAK,IAAIgF,EAAI,EAAGA,EAAI79B,EAAIygC,WAAWhxC,OAAQouC,IAC3C,CACE,MAAM6C,EAAY1gC,EAAIygC,WAAWP,KAAKrC,GACtChF,EAAI,eAAe6H,EAAUC,UAAYD,EAAUE,SACpD,CACF,OAEuB,IAAjB5gC,EAAIwgC,WAEX3H,EAAM74B,EAAI4gC,WAIZ,GAAI5gC,EAAI6gC,gBAEN,IAAK,IAAI9vC,EAAI,EAAGA,EAAIiP,EAAI8gC,WAAWrxC,OAAQsB,IAC3C,CACE,MAAMmvC,EAAOlgC,EAAI8gC,WAAWZ,KAAKnvC,GAC3B4vC,EAAWT,EAAKS,SACtB,QAA+B,IAAnB9H,EAAI8H,GAEd9H,EAAI8H,GAAYl6C,KAAK85C,YAAYL,OAGnC,CACE,QAAoC,IAAxBrH,EAAI8H,GAAc,KAC9B,CACE,MAAMI,EAAMlI,EAAI8H,GAChB9H,EAAI8H,GAAY,GAChB9H,EAAI8H,GAAUxvC,KAAK4vC,EACpB,CACDlI,EAAI8H,GAAUxvC,KAAK1K,KAAK85C,YAAYL,GACrC,CACF,CAEH,OAAOrH,CACR,EC9EH,MAAMmI,GAEJ,WAAA57C,GACE,CAEF,uBAAO6R,GAEL,MAAMgqC,EAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,KAC1E,IAAIC,EAAM,IAEV,IAAK,IAAInwC,EAAI,EAAGA,EAAI,EAAGA,IACvB,CAEEmwC,GAAOD,EADOzsC,KAAK4C,MAAM5C,KAAK6C,SAAW4pC,EAAUxxC,QAEpD,CAED,OAAOyxC,CACR,CAED,iBAAOC,CAAWxvC,GAEhB,MAAMyvC,EAAQzvC,EAAO5F,MAAM,KAE3B,IAAK,IAAIgF,EAAI,EAAGA,EAAIqwC,EAAM3xC,OAAQsB,IAEhCqwC,EAAMrwC,GAAKqwC,EAAMrwC,GAAG,GAAGc,cAAgBuvC,EAAMrwC,GAAGswC,OAAO,GAGzD,OAAOD,EAAM31C,KAAK,IACnB,CAED,8BAAO61C,CAAwB3vC,GAE7B,OAAOA,EAAO4vC,OAAO,GAAG1vC,cAAgBF,EAAOnG,MAAM,EACtD,CAED,yBAAOg2C,CAAmB7vC,GAExB,OAAOA,EAAO7H,cAAc4B,QAAQ,iBAAkBqG,GAAUA,EAAMvG,OAAO,GAAGqG,eACjF,ECvCH,MAAM4vC,GAEJ,WAAAr8C,GACE,CAGF,cAAAs8C,CAAeC,GAEbA,EAAWA,EAAS51C,MAAM,KAE1B,IAAI61C,EAAQ91C,OAAO61C,EAAS,IAC5BC,EAAgB,GAARA,EAAa,GAAK,IAE1B,IAAIC,EAAU/1C,OAAO61C,EAAS,IAC9BE,EAAoB,GAAVA,EAAe,IAEzB,IAAIC,EAAUh2C,OAAO61C,EAAS,IAG9B,OAFAG,GAAoB,IAEbF,EAAQC,EAAUC,CAC1B,ECVH,MAAMC,WAAa13B,EAEjB,WAAAjlB,GAEE,MAAM8kB,EAAW,IAAI/kB,EAAe,CAClCM,SAAU,CACR0B,OAAQ,CAAExB,MAAO,IAAIyB,EAAM,aAE7BrB,6OACAC,0WACAozB,WAAY,CAAE4oB,aAAa,GAC3BhyB,aAAa,EACb/pB,YAAY,IAGRg8C,EAAiB,IAAIryB,EAAc,IAAK,IAAK,IAAK,KAIxDpqB,MAF6B6zC,GAAkBC,gCAAgC2I,GAEnD/3B,GAE5BzjB,KAAKy7C,SAASpsC,GAAI,IACnB,ECvBH,MAAMmT,WAAaoB,EAEjB,WAAAjlB,CAAY0P,GAEV,MAAMmV,EAAW,IAAInB,EACrBmB,EAAS/E,aAAa,WAAsB,IAAIof,EAAgB,IAAI7G,aAAa,IAAK,IACtFxT,EAAS/E,aAAa,gBAAsB,IAAIof,EAAgB,IAAI7G,aAAa,IAAK,IACtFxT,EAAS/E,aAAa,oBAAsB,IAAIof,EAAgB,IAAI7G,aAAa,IAAK,IACtFxT,EAAS/E,aAAa,cAAsB,IAAIof,EAAgB,IAAI7G,aAAa,IAAK,IACtFxT,EAAS/E,aAAa,WAAsB,IAAIof,EAAgB,IAAI7G,aAAa,IAAK,IAiBtFj4B,MAAMykB,EAfW,IAAI9kB,EAAe,CAClCM,SAAU,CACR08C,WAAY,CAAEx8C,MAAO,IACrBy8C,QAAS,CAAEz8C,MAAO,GAClB08C,aAAc,CAAE18C,MAAO,GACvBwB,OAAQ,CAAExB,MAAO,IAAIyB,EAAM,aAE7BrB,+sBACAC,8jBACAgqB,aAAa,EACb/pB,YAAY,EACZmzB,WAAY,CAAE4oB,aAAa,MAMzBltC,GAEFrO,KAAK67C,MAAMxtC,EAEd,CAED,KAAAwtC,CAAMxtC,GAEJ,MAAM4kC,EAAW,GACX6I,EAAgB,GAChBC,EAAoB,GACpBC,EAAc,GACdC,EAAW,GACjB,IAAIC,EAAqB,EAEzB,IAAK,IAAI5xC,EAAI,EAAGA,EAAI+D,EAAOrF,OAAQsB,IACnC,CACE2oC,EAASvoC,KAAK2D,EAAO/D,GAAG+E,GACxB4jC,EAASvoC,KAAK2D,EAAO/D,GAAGgF,GACxB2jC,EAASvoC,KAAK2D,EAAO/D,GAAG8F,GACxB4rC,EAAYtxC,KAAK,GAEjBuoC,EAASvoC,KAAK2D,EAAO/D,GAAG+E,GACxB4jC,EAASvoC,KAAK2D,EAAO/D,GAAGgF,GACxB2jC,EAASvoC,KAAK2D,EAAO/D,GAAG8F,GACxB4rC,EAAYtxC,MAAM,GAElB,MAAMyxC,EAAan8C,KAAKo8C,oBAAoB/tC,EAAQ/D,GACpDwxC,EAAcpxC,KAAKyxC,EAAW9sC,GAC9BysC,EAAcpxC,KAAKyxC,EAAW7sC,GAC9BwsC,EAAcpxC,KAAKyxC,EAAW/rC,GAE9B0rC,EAAcpxC,KAAKyxC,EAAW9sC,GAC9BysC,EAAcpxC,KAAKyxC,EAAW7sC,GAC9BwsC,EAAcpxC,KAAKyxC,EAAW/rC,GAE9B,MAAMisC,EAAiBr8C,KAAKs8C,wBAAwBjuC,EAAQ/D,GAC5DyxC,EAAkBrxC,KAAK2xC,EAAehtC,GACtC0sC,EAAkBrxC,KAAK2xC,EAAe/sC,GACtCysC,EAAkBrxC,KAAK2xC,EAAejsC,GAEtC2rC,EAAkBrxC,KAAK2xC,EAAehtC,GACtC0sC,EAAkBrxC,KAAK2xC,EAAe/sC,GACtCysC,EAAkBrxC,KAAK2xC,EAAejsC,GAEtC6rC,EAASvxC,KAAKwxC,GACdD,EAASvxC,KAAKwxC,GAEV5xC,EAAI+D,EAAOrF,OAAS,IAEtBkzC,GAAsB7tC,EAAO/D,GAAGye,WAAWozB,GAE9C,CACD,MAAMI,EAAwB,IAAIvlB,aAAaic,GACzCuJ,EAAwB,IAAIxlB,aAAa8kB,GACzCW,EAAwB,IAAIzlB,aAAa+kB,GACzCW,EAAwB,IAAI1lB,aAAaglB,GACzCW,EAAwB,IAAI3lB,aAAailB,GAEzClJ,EAAU,GAChB,IAAK,IAAIzoC,EAAI,EAAGA,GAAMiyC,EAAWvzC,OAAS,EAAK,GAAK,EAAGsB,IACvD,CACE,MAAMmyB,EAAa,EAAJnyB,EAAS,EACxByoC,EAAQroC,KAAK+xB,GACbsW,EAAQroC,KAAK+xB,EAAQ,GACrBsW,EAAQroC,KAAK+xB,EAAQ,GAErBsW,EAAQroC,KAAK+xB,GACbsW,EAAQroC,KAAK+xB,EAAQ,GACrBsW,EAAQroC,KAAK+xB,EAAQ,EACtB,CAEDz8B,KAAKwjB,SAASo5B,SAAS7J,GACvB/yC,KAAKwjB,SAAS9L,aAAa,YAAYyP,KAAK,IAAI0W,EAAgB0e,EAAY,IAC5Ev8C,KAAKwjB,SAAS9L,aAAa,iBAAiByP,KAAK,IAAI0W,EAAgB2e,EAAkB,IACvFx8C,KAAKwjB,SAAS9L,aAAa,qBAAqByP,KAAK,IAAI0W,EAAgB4e,EAAsB,IAC/Fz8C,KAAKwjB,SAAS9L,aAAa,eAAeyP,KAAK,IAAI0W,EAAgB6e,EAAiB,IACpF18C,KAAKwjB,SAAS9L,aAAa,YAAYyP,KAAK,IAAI0W,EAAgB8e,EAAc,IAE9E38C,KAAKwjB,SAAS9L,aAAa,YAAYmI,aAAc,EACrD7f,KAAKwjB,SAAS9L,aAAa,iBAAiBmI,aAAc,EAC1D7f,KAAKwjB,SAAS9L,aAAa,qBAAqBmI,aAAc,EAC9D7f,KAAKwjB,SAAS9L,aAAa,eAAemI,aAAc,EACxD7f,KAAKwjB,SAAS9L,aAAa,YAAYmI,aAAc,EAErD7f,KAAKyjB,SAASzkB,SAAS28C,QAAQz8C,MAAQg9C,EACvCl8C,KAAK68C,QAAUX,CAChB,CAED,aAAIY,CAAU59C,GAEZc,KAAKyjB,SAASzkB,SAAS08C,WAAWx8C,MAAQA,CAC3C,CAED,aAAI49C,GAEF,OAAO98C,KAAKyjB,SAASzkB,SAAS08C,WAAWx8C,KAC1C,CAED,uBAAAo9C,CAAwBjuC,EAAQ/D,GAE9B,OAAU,IAANA,EAEK+D,EAAO,GAAG/F,QAAQ0gB,IAAI3a,EAAO,IAAIkC,gBAAgB,GAAGjE,IAAI+B,EAAO,IAI/DA,EAAO/D,EAAI,EAErB,CAED,mBAAA8xC,CAAoB/tC,EAAQ/D,GAE1B,OAAIA,IAAM+D,EAAOrF,OAAS,EAEjBqF,EAAOA,EAAOrF,OAAS,GAAGV,QAAQ0gB,IAAI3a,EAAOA,EAAOrF,OAAS,IAAIuH,gBAAgB,GAAGjE,IAAI+B,EAAOA,EAAOrF,OAAS,IAI/GqF,EAAO/D,EAAI,EAErB,CAED,MAAAnM,GAEC,CAED,QAAA+V,GAEE,OAAOlU,KAAKk8C,kBACb,CAED,YAAAa,GAEE,OAAO/8C,KAAKk8C,kBACb,CAED,OAAA19C,GAEEwB,KAAKwjB,SAAShlB,UACdwB,KAAKyjB,SAASjlB,UACVwB,KAAKg9C,QAEPh9C,KAAKg9C,OAAOzwC,OAAOvM,KAEtB,CAED,SAAImiB,CAAMzR,GAER1Q,KAAKyjB,SAASzkB,SAAS0B,OAAOxB,MAAMiD,IAAIuO,EACzC,CAED,SAAIyR,GAEF,OAAOniB,KAAKyjB,SAASzkB,SAAS0B,OAAOxB,KACtC,CAED,UAAA+9C,CAAWvsC,GAET1Q,KAAKyjB,SAASzkB,SAAS0B,OAAOxB,MAAMioB,KAAKzW,EAC1C,EC3LH,MAAMwsC,WAAmBt5B,EAEvB,WAAAjlB,CAAY0wB,EAAS8tB,GAEnBA,EAAQA,GAAS,IAAI/9C,EAAQ,EAAG,GAChC,MAAMqkB,EAAW,IAAI/kB,EAAe,CAClCM,SAAU,CACRC,SAAU,CAAEC,MAAOmwB,GACnB+tB,eAAgB,CAAEl+C,MAAO,GACzBm+C,OAAQ,CAAEn+C,MAAO,GACjBo+C,SAAU,CAAEp+C,MAAO,IAErBI,igBACAC,mLACAgqB,aAAa,EACb/pB,YAAY,EACZghB,KAAM+8B,IAEF/5B,EAAW,IAAI2F,EAAc,EAAG,EAAG,GACzC3F,EAASe,WAAW44B,EAAM9tC,EAAI,GAAI8tC,EAAM7tC,EAAI,EAAG,GAC/C,MAAMkuC,EAAgBnuB,EAAQ5I,MAAMxH,MAAQoQ,EAAQ5I,MAAM1G,OAC1DyD,EAAS1B,MAAM07B,EAAe,EAAG,GACjCz+C,MAAMykB,EAAUC,GAChBzjB,KAAKw9C,cAAgBA,EACrBx9C,KAAKwjB,SAASi6B,qBAEdz9C,KAAK09C,YAAc,IAAI17B,EACvBhiB,KAAKwjB,SAASm6B,YAAYnuB,QAAQxvB,KAAK09C,YACxC,CAED,cAAAE,GAEE59C,KAAKyjB,SAASzkB,SAASC,SAASC,MAAM2gB,aAAc,EACpD,MAAMg+B,EAAM79C,KAAKyjB,SAASzkB,SAASC,SAASC,MAAMunB,MAElDzmB,KAAKwjB,SAAS1B,MAAM,EAAI9hB,KAAKw9C,cAAe,EAAG,GAC/Cx9C,KAAKw9C,cAAgBK,EAAI5+B,MAAQ4+B,EAAI99B,OACrC/f,KAAKwjB,SAAS1B,MAAM9hB,KAAKw9C,cAAe,EAAG,GAC3Cx9C,KAAKwjB,SAASi6B,qBACdz9C,KAAKwjB,SAASm6B,YAAYnuB,QAAQxvB,KAAK09C,YACxC,CAED,QAAIt3C,GAEF,OAAOpG,KAAK09C,YAAYp1C,QAAQiI,eAAevQ,KAAK8hB,MAAMzS,EAC3D,CAED,QAAIjJ,CAAKlH,GAEPc,KAAK8hB,MAAM3f,IAAIjD,EAAOA,EAAOA,GAC7Bc,KAAKyjB,SAASzkB,SAASq+C,OAAOn+C,MAAQA,CACvC,CAED,kBAAI4+C,CAAeC,GAEjB/9C,KAAKyjB,SAASzkB,SAASo+C,eAAel+C,OAAoB,IAAZ6+C,EAAmB,EAAI,CACtE,CAED,kBAAID,GAEF,OAAuD,IAAhD99C,KAAKyjB,SAASzkB,SAASo+C,eAAel+C,KAC9C,CAED,WAAIuN,CAAQA,GAEVzM,KAAKyjB,SAASzkB,SAASs+C,SAASp+C,MAAQuN,CACzC,CAED,WAAIA,GAEF,OAAOzM,KAAKyjB,SAASzkB,SAASs+C,SAASp+C,KACxC,CAED,OAAAV,GAEEwB,KAAKwjB,SAAShlB,UACdwB,KAAKg9C,OAAOzwC,OAAOvM,MACnBA,KAAKyjB,SAASzkB,SAASC,SAASC,MAAMV,UACtCwB,KAAKyjB,SAASjlB,SACf,ECnFH,MAAMw/C,WAAed,GAEnB,WAAAv+C,CAAYkgB,EAAMC,EAAMqD,EAAOg7B,EAAOc,GAEpC,MAAMC,EAAqB,IAAIp9B,GAAiBm9B,GAE1CE,EAAgB,CACpBr/B,KAAMA,EACNM,WAAY+C,GAAS,WAEjB5C,EAAiB2+B,EAAmB5+B,gBAAgBT,EAAMs/B,GAEhE5+B,EAAe8W,UAAY+nB,EAC3B7+B,EAAe8W,UAAYuX,EAC3BruB,EAAeM,aAAc,EAC7B9gB,MAAMwgB,EAAgB49B,GAEtBn9C,KAAKk+C,mBAAqBA,EAC1Bl+C,KAAKuf,eAAiBA,EACtBvf,KAAKm+C,cAAgBA,CACtB,CAED,QAAIt/B,CAAK3f,GAEPc,KAAKk+C,mBAAmBh/B,YAAYhgB,EAAOc,KAAKm+C,eAChDn+C,KAAK49C,gBACN,CAED,QAAI/+B,GAEF,MAAO,iBACR,EC3BH,MAAMw/B,WAA0Bh+C,GAE9B,WAAA1B,CAAY2/C,EAAY,GAEtBv/C,w1BAAkB,CAChBE,SAAU,CAAEC,WAAOgB,GACnBmmB,YAAa,CAAEnnB,MAAO,IAAIE,EAAQqoB,GAAQxI,MAAOwI,GAAQ1H,SACzDuG,aAAc,CAAEpnB,MAAO,IAAIE,GAC3Bm/C,aAAc,CAAEr/C,MAAO,IAAIE,EAAQ,EAAG,IACtCo/C,KAAM,CAAEt/C,MAAO,IAAI8iB,GACnBy8B,YAAa,CAAEv/C,MAAO,IAAIE,GAC1Bs/C,aAAc,CAAEx/C,MAAO,KAEzBc,KAAKupB,aAAc,EACnBvpB,KAAKR,YAAa,EAClBQ,KAAKL,WAAY,CAClB,ECxBH,MAAMg/C,GAEJ,WAAAhgD,GAEEqB,KAAKmkC,QAAU,IAAI/kC,CACpB,CAED,WAAAw/C,CAAYz5B,GAEV,OAAOnlB,KAAKmkC,QAAQhiC,IAAIgjB,EAAS9V,EAAG8V,EAAS7V,EAC9C,ECPH,MAAMuvC,GAEJ,WAAAlgD,GAEEqB,KAAK8+C,SAAW,IAAI98B,EACpBhiB,KAAK++C,SAAW,IAAI3/C,CACrB,CAED,WAAAw/C,CAAYz5B,GAKV,OAHAnlB,KAAK8+C,SAAS33B,KAAKhC,GACnBnlB,KAAK8+C,SAAS5Y,QAAQ7a,GAAcrX,SAE7BhU,KAAK++C,SAAS58C,IAAInC,KAAK8+C,SAASzvC,EAAGrP,KAAK8+C,SAASxvC,EACzD,ECnBH,MAAM0vC,GAEJ,WAAArgD,GAGC,CAED,MAAAR,CAAO8gD,EAAYC,GAGlB,CAED,QAAAlhD,CAASihD,GACP,CAEF,OAAAhhD,CAAQghD,GACN,ECdJ,MAAME,WAAeH,GAEnB,WAAArgD,GAEEI,OACD,CAED,MAAAZ,CAAO8gD,EAAYC,GAEbD,EAAWG,cAAcF,IAE3BD,EAAWjjC,UAAUijC,EAAWI,gBAEnC,ECbH,MAAMC,WAAqBN,GAEzB,WAAArgD,GAEEI,OACD,CAED,QAAAf,CAASihD,GAEPA,EAAWM,gBACZ,CAED,MAAAphD,CAAO8gD,EAAYC,GAEbD,EAAWG,cAAcF,GAE3BD,EAAWjjC,UAAUijC,EAAWO,iBAIhCP,EAAWjjC,UAAUijC,EAAWQ,eAEnC,ECtBH,MAAMC,WAAoBV,GAExB,WAAArgD,GAEEI,OACD,CAED,QAAAf,CAASihD,GAEPA,EAAWU,gBACXV,EAAWjjC,UAAUijC,EAAWW,eACjC,ECXH,MAAMC,WAAqBb,GAEzB,WAAArgD,GAEEI,OACD,CAED,QAAAf,CAASihD,GAEPj/C,KAAK8/C,mBAAmBb,EACzB,CAED,MAAA9gD,CAAO8gD,EAAYC,GAEbD,EAAWG,cAAcF,GAE3Bl/C,KAAK8/C,mBAAmBb,GAIxBA,EAAWjjC,UAAUijC,EAAWQ,eAEnC,CAED,kBAAAK,CAAmBb,GAEjBA,EAAWc,gBACZ,ECTH,MAAMC,WAAkBp8B,EAEtB,WAAAjlB,CAAY2B,EAAMC,GAEhBxB,MAAM,IAAIoqB,EAAc,EAAG,GAAI,IAAIk1B,IAEnCr+C,KAAKigD,cAAe,EAEpBjgD,KAAKkgD,kBAAoB,IAAIrB,GAC7B7+C,KAAK0b,cAAgB,IAAIyjC,GAEzBn/C,KAAKmgD,UAAY,IAAIn+B,EAErBhiB,KAAK4/C,eAAiB,IAAIT,GAC1Bn/C,KAAKq/C,gBAAkB,IAAIC,GAC3Bt/C,KAAKy/C,eAAiB,IAAIC,GAC1B1/C,KAAKw/C,gBAAkB,IAAIK,GAE3B7/C,KAAKhC,cAAWkC,EAChBF,KAAK/B,aAAUiC,EACfF,KAAKogD,cAAWlgD,EAEhBF,KAAKqgD,cAAgB,IAAIjhD,EACzBY,KAAKsgD,oBAAsB,IAAIlhD,EAC/BY,KAAKugD,eAAiB,IAAInhD,EAE1BY,KAAKwgD,aAAe,IAAIphD,EAAQ,EAAG,GAEnCY,KAAKyoB,eAAgB,EACrBzoB,KAAKygD,kBAAmB,EACxBzgD,KAAKyiB,YAAc,EAEnBziB,KAAKoG,KAAO,EACZpG,KAAK0gD,aAAe,IAAIthD,CACzB,CAED,gBAAAuhD,CAAiBzhD,GAEfc,KAAKyiB,YAAcvjB,CACpB,CAED,eAAI0hD,GAEF,OAAO5gD,KAAKyjB,SAASzkB,SAASy/C,YAAYv/C,KAC3C,CAED,gBAAA2hD,CAAiB51B,GAEfjrB,KAAK0gD,aAAav5B,KAAK8D,GACvBjrB,KAAKyjB,SAASzkB,SAASu/C,aAAar/C,MAAMioB,KAAK8D,EAChD,CAED,SAAAjP,CAAUmX,GAERnzB,KAAK0b,cAAczd,QAAQ+B,MAC3BA,KAAK0b,cAAgByX,EACrBnzB,KAAK0b,cAAc1d,SAASgC,KAC7B,CAED,YAAImlB,GAEF,OAAOnlB,KAAKmgD,SACb,CAED,aAAIW,CAAU/C,GAEZ/9C,KAAKyjB,SAAS9jB,UAAYo+C,CAC3B,CAED,aAAI+C,GAEF,OAAO9gD,KAAKyjB,SAAS9jB,SACtB,CAED,gBAAIohD,CAAa7hD,GAEfc,KAAKyjB,SAASzkB,SAAS0/C,aAAax/C,MAAQA,CAC7C,CAED,gBAAI6hD,GAEF,OAAO/gD,KAAKyjB,SAASzkB,SAAS0/C,aAAax/C,KAC5C,CAED,WAAA8hD,GAEEhhD,KAAKihD,SAAU,CAChB,CAED,iCAAAriB,GAEE5+B,KAAKkgD,kBAAoB,IAAIrB,EAC9B,CAED,kCAAAngB,GAEE1+B,KAAKkgD,kBAAoB,IAAIvB,EAC9B,CAED,WAAAn4B,CAAY6I,GAEVA,EAAQgH,UAAY1W,EACpB0P,EAAQiH,UAAY3W,EACpB0P,EAAQxP,aAAc,EAEtB7f,KAAKwgD,aAAar+C,IAAIktB,EAAQ5I,MAAMxH,MAAOoQ,EAAQ5I,MAAM1G,QAEzD/f,KAAKyjB,SAASzkB,SAASC,SAASC,MAAQmwB,EACxCrvB,KAAKkhD,SAASlhD,KAAKyjB,SAASzkB,SAASsnB,aAAapnB,OAClDc,KAAKihD,SAAU,CAChB,CAED,YAAAniB,CAAaqiB,GAEXnhD,KAAKyjB,SAASzkB,SAASqnB,YAAYnnB,MAAMiD,IAAIslB,GAAQxI,MAAOwI,GAAQ1H,QACpE/f,KAAKkhD,SAASlhD,KAAKyjB,SAASzkB,SAASsnB,aAAapnB,OAElDc,KAAKsgD,oBAAoBn5B,KAAKnnB,KAAKkgD,kBAAkBtB,YAAY5+C,KAAKmlB,WACtEnlB,KAAKyjB,SAASzkB,SAASw/C,KAAKt/C,MAAMioB,KAAKnnB,KAAKmlB,UAC5CnlB,KAAK0b,cAAcvd,OAAO6B,KAAMmhD,EACjC,CAED,aAAA/B,CAAc+B,GAEZnhD,KAAKugD,eAAep5B,KAAKnnB,KAAKsgD,qBAC9BtgD,KAAKohD,mBAAmBphD,KAAKugD,gBAC7BvgD,KAAKugD,eAAelxC,GAAKrP,KAAK0gD,aAAarxC,EAC3CrP,KAAKugD,eAAejxC,GAAKtP,KAAK0gD,aAAapxC,EAE3C,MAAM+xC,GAAO,IAAIC,GAAO33B,qBAAqB3pB,KAAKugD,eAAgBvgD,KAAKkhD,YAKvE,OAHAlhD,KAAKqgD,cAAcl5B,KAAKg6B,GACxBnhD,KAAKohD,mBAAmBphD,KAAKqgD,eAEtBgB,EAAKE,cAAcvhD,KAAKqgD,cAChC,CAED,kBAAAe,CAAmBI,GAEjBA,EAAcnyC,GAAuB,GAAlBmyC,EAAcnyC,EAAU,IAAOoY,GAAQxI,MAASjf,KAAK0gD,aAAarxC,EACrFmyC,EAAclyC,GAAuB,GAAlBkyC,EAAclyC,EAAU,IAAOmY,GAAQ1H,OAAS/f,KAAK0gD,aAAapxC,CACtF,CAED,yBAAAmyC,GAEE,MAAM94B,EAAM3oB,KAAKsgD,oBAAoBh4C,QAErC,OADAtI,KAAKohD,mBAAmBz4B,GACjBA,CACR,CAED,yBAAA+4B,CAA0BC,GAExB3hD,KAAKmlB,SAAS9V,EAAKsyC,EAAWtyC,EAAIoY,GAAQxI,MAAS,EAAI,EACvDjf,KAAKmlB,SAAS7V,EAAKqyC,EAAWryC,EAAImY,GAAQ1H,OAAU,EAAI,CACzD,CAED,OAAAvhB,GAEMwB,KAAKyjB,SAASzkB,SAASC,SAASC,OAElCc,KAAKyjB,SAASzkB,SAASC,SAASC,MAAMV,UAGxCwB,KAAKwjB,SAAShlB,UACdwB,KAAKyjB,SAASjlB,SACf,CAED,QAAA0iD,CAASr7B,GAEP,OAAIA,EAEKA,EAAQsB,KAAKnnB,KAAKwgD,cAAcjwC,eAAevQ,KAAKoG,KAAOqhB,GAAQlC,MAInE,IAAInmB,GAAU+nB,KAAKnnB,KAAKwgD,cAAcjwC,eAAevQ,KAAKoG,KAAOqhB,GAAQlC,IAEnF,CAED,cAAAg6B,GACE,CAEF,aAAAI,GACE,CAEF,cAAAI,GACE,EC5MJ,MAAM6B,WAA8Bh+B,EAElC,WAAAjlB,CAAY6kB,EAAUC,GAEpB1kB,MAAMykB,EAAUC,GAEhB,MAAMo+B,EAAO7hD,KAEbA,KAAK8hD,eAAiB,KAEpBD,EAAKp+B,SAAStlB,QAAQ,CAEzB,ECZH,MAAM4jD,GAEJ,WAAApjD,CAAYssB,EAAQ+2B,EAAcC,GAEhC,MAAMhjC,EAAU+iC,EAAa7c,MAAQ6c,EAAa3b,KAC5CtmB,EAAUiiC,EAAa1b,IAAQ0b,EAAazb,OAElDvmC,KAAK8hB,MAAW,IAAI1iB,EAAQ6f,EAAOc,GACnC/f,KAAKmlB,SAAW,IAAI/lB,EAAQ6rB,EAAS+2B,EAAa3b,KAAM2b,EAAazb,QAErEvmC,KAAKiiD,aAAe,IAAI74B,EAAQ64B,EAAa5b,KAAM4b,EAAa9c,MAAO8c,EAAa3b,IAAK2b,EAAa1b,OACvG,ECVH,MAAM2b,GAEJ,WAAAvjD,CAAYwjD,EAActjC,EAAO,IAE/B7e,KAAKmiD,aAAeA,EAEpBniD,KAAKoiD,OAAS,GAEdpiD,KAAKqiD,gBAAkB,EACvBriD,KAAKsiD,iBAAkB,EACvBtiD,KAAKuiD,gBAAkB,EAEvBviD,KAAKmlB,SAAW,IAAInD,EACpBhiB,KAAK+kB,WAAa,IAAIke,EACtBjjC,KAAK8hB,MAAQ,IAAIE,EAAQ,EAAG,EAAG,GAC/BhiB,KAAKwiD,OAAS,IAAI3e,EAElB7jC,KAAKmiB,MAAQ,IAAIxhB,EAAM,WAEvBX,KAAK4gD,YAAc,IAAIxhD,EACvBY,KAAKyiD,UAAY,EAEjBziD,KAAK0iD,OAAW7jC,EAEhB7e,KAAK2iD,kBAAkB9jC,EACxB,CAED,QAAIA,CAAK3f,GAEPc,KAAK0iD,OAASxjD,EACdc,KAAK2iD,kBAAkBzjD,GACvBc,KAAKsiD,iBAAkB,CACxB,CAED,QAAIzjC,GAEF,OAAO7e,KAAK0iD,MACb,CAED,aAAAE,GAEE5iD,KAAKwiD,OAAOK,QAAQ7iD,KAAKmlB,SAAUnlB,KAAK+kB,WAAY/kB,KAAK8hB,OACzD9hB,KAAKsiD,iBAAkB,EACvBtiD,KAAKqiD,gBAAiB,CACvB,CAED,iBAAAS,GAEE9iD,KAAKqiD,gBAAiB,CACvB,CAED,iBAAAU,GAEE/iD,KAAKuiD,gBAAiB,CACvB,CAED,YAAAS,CAAahH,EAAc,EAAGiH,EAAO,GAEnC,MAAMC,GAAkB,IAAIjgB,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,GAAKg6B,EAAc,IAAOjuC,KAAK8B,GAAK,GAC1GszC,GAAW,IAAIlgB,GAAaC,iBAAiB,IAAIlhB,EAAQ,EAAG,EAAG,IAAMihC,EAAO,IAAOl1C,KAAK8B,GAAK,GAEnG7P,KAAK+kB,WAAWoC,KAAK+7B,EAAgBE,SAASD,IAC9CnjD,KAAKsiD,iBAAkB,CACxB,CAED,YAAA/7B,CAAaoC,GAEX3oB,KAAKmlB,SAASgC,KAAKwB,GACnB3oB,KAAKsiD,iBAAkB,CACxB,CAED,QAAAzV,CAASzmC,GAEPpG,KAAK8hB,MAAM3f,IAAIiE,EAAMA,EAAMA,GAC3BpG,KAAKsiD,iBAAkB,CACxB,CAED,SAAAe,CAAU3yC,GAER1Q,KAAKmiB,MAAMhgB,IAAIuO,GACf1Q,KAAKuiD,gBAAiB,CACvB,CAED,SAAAe,CAAUnG,GAERn9C,KAAK4gD,YAAYz5B,KAAKg2B,GACtBn9C,KAAKujD,eACN,CAED,WAAI92C,CAAQ+2C,GAEVxjD,KAAKyiD,UAAYe,EACjBxjD,KAAKuiD,gBAAiB,CACvB,CAED,WAAI91C,GAEF,OAAOzM,KAAKyiD,SACb,CAED,aAAAc,GAEEvjD,KAAK2iD,kBAAkB3iD,KAAK6e,KAC7B,CAED,iBAAA8jC,CAAkB9jC,GAEhB,IAAI4kC,EAAS,EAEbzjD,KAAKoiD,OAAOp5C,OAAS,EAErB,IAAK,IAAIsB,EAAI,EAAGA,EAAIuU,EAAK7V,OAAQsB,IACjC,CACE,MAAMo5C,EAAU7kC,EAAK8kC,WAAWr5C,GAC1Bs5C,EAAQ5jD,KAAKmiD,aAAa3+C,MAAKyV,GAAWA,EAAQyqC,UAAYA,IACpE,GAAIE,EACJ,CACE,GAAIA,EAAMC,YACV,CACE,MAAMC,EAAa,IAAI/B,GAAU0B,EAAQG,EAAMC,YAAaD,EAAMG,aAClE/jD,KAAKoiD,OAAO13C,KAAKo5C,EAClB,CACDL,GAAUG,EAAMI,OACjB,CACF,CAED,MAAMC,EAAO,IAAI3C,EACX4C,EAAclkD,KAAKoiD,OAAO,GAChC6B,EAAKt6B,qBAAqBu6B,EAAY/+B,SAAS7c,QAAQgE,IAAI,IAAIlN,EAAQ8kD,EAAYpiC,MAAMzS,EAAI,EAAG60C,EAAYpiC,MAAMxS,EAAI,IAAK40C,EAAYpiC,OAEvI,IAAK,IAAIxX,EAAI,EAAGA,EAAItK,KAAKoiD,OAAOp5C,OAAQsB,IACxC,CACE,MAAM4D,EAAIlO,KAAKoiD,OAAO93C,GAChBmf,GAAM,IAAI63B,GAAO33B,qBAAqBzb,EAAEiX,SAAS7c,QAAQgE,IAAI,IAAIlN,EAAQ8O,EAAE4T,MAAMzS,EAAI,EAAGnB,EAAE4T,MAAMxS,EAAI,IAAKpB,EAAE4T,OACjHmiC,EAAKE,MAAM16B,EACZ,CAED,MAAM26B,EAAY,IAAIhlD,EACtB6kD,EAAKz0B,QAAQ40B,GACb,IAAK,IAAI95C,EAAI,EAAGA,EAAItK,KAAKoiD,OAAOp5C,OAAQsB,IAEtCtK,KAAKoiD,OAAO93C,GAAG6a,SAAS9V,GAAK+0C,EAAU/0C,EAAI,EAC3CrP,KAAKoiD,OAAO93C,GAAG6a,SAAS7V,GAAK80C,EAAU90C,EAAI,EAE3CtP,KAAKoiD,OAAO93C,GAAG6a,SAAS9V,GAAM+0C,EAAU/0C,EAAI,EAAKrP,KAAK4gD,YAAYvxC,EAClErP,KAAKoiD,OAAO93C,GAAG6a,SAAS7V,GAAM80C,EAAU90C,EAAI,EAAKtP,KAAK4gD,YAAYtxC,EAGpEtP,KAAKqiD,gBAAiB,CACvB,EChJH,MAAMgC,WAAwBhkD,GAE5B,WAAA1B,CAAY0wB,GAEVtwB,i6CAAkB,CAChBulD,SAAU,CAAEplD,MAAOmwB,GACnBk1B,UAAW,CAAErlD,MAAO,IACpBslD,WAAY,CAAEtlD,MAAO,IAAIE,EAAQ,EAAG,MAGtCY,KAAKupB,aAAc,EACnBvpB,KAAK2yB,WAAa,CAChB4oB,aAAa,GAEfv7C,KAAKR,YAAa,EAClBQ,KAAKwgB,KAAO+8B,EACZluB,EAAQgH,UAAYuX,EACpBve,EAAQiH,UAAYsX,EACpBve,EAAQzP,iBAAkB,CAC3B,CAED,cAAA6kC,CAAer+C,GAEbpG,KAAKhB,SAASwlD,WAAWtlD,MAAMioB,KAAK/gB,EACrC,CAED,YAAAs+C,CAAaxlD,GAEXc,KAAKhB,SAASulD,UAAUrlD,MAAQ8N,GAAMgC,KAAK,GAAK,GAAK9P,EACtD,ECvBH,MAAMylD,WAAqB/gC,EAEzB,WAAAjlB,CAAYimD,EAAaC,GAEvB,MAEMC,EAAqB,IAAIC,EAC/BD,EAAmBE,cAAgB,EAEnC,MAAMxhC,EAAW,IAAI2F,EAAc,EAAG,GACtC3F,EAASe,UAAU,GAAK,GAAK,GAC7BugC,EAAmBrmC,aAAa,WAAa,IAAIwmC,EAAuBzhC,EAAS9L,aAAa,YAAYo6B,MAAO,IACjHgT,EAAmBrmC,aAAa,KAAa,IAAIwmC,EAAuBzhC,EAAS9L,aAAa,MAAMo6B,MAAO,IAC3GgT,EAAmBroB,MAAQjZ,EAASiZ,MAEpC,MAAMyoB,EAAiB,IAAIC,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GACxFC,EAAiB,IAAIF,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GACxFE,EAAiB,IAAIH,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GACxFG,EAAiB,IAAIJ,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GAExFI,EAAe,IAAIL,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GACtFpD,EAAe,IAAImD,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GAEtFjjC,EAAQ,IAAIgjC,EAAyB,IAAInuB,aAAaouB,KAAsB,GAAG,GAErFF,EAAeO,MAASC,EACxBL,EAAeI,MAASC,EACxBJ,EAAeG,MAASC,EACxBH,EAAeE,MAASC,EACxBF,EAAaC,MAAWC,EACxB1D,EAAayD,MAAWC,EACxBvjC,EAAMsjC,MAAkBC,EAExBZ,EAAmBrmC,aAAa,iBAAkBymC,GAClDJ,EAAmBrmC,aAAa,iBAAkB4mC,GAClDP,EAAmBrmC,aAAa,iBAAkB6mC,GAClDR,EAAmBrmC,aAAa,iBAAkB8mC,GAElDT,EAAmBrmC,aAAa,eAAgB+mC,GAChDV,EAAmBrmC,aAAa,eAAgBujC,GAChD8C,EAAmBrmC,aAAa,QAAgB0D,GAEhDpjB,MAAM+lD,EAAoB,IAAIT,GAAgBQ,IAE9C7kD,KAAK2lD,cAAgB,GACrB3lD,KAAK4kD,YAAcA,EAEnB5kD,KAAKyjB,SAASghC,eAAe,IAAIrlD,EAAQwlD,EAAYgB,MAAM3mC,MAAO2lC,EAAYgB,MAAM7lC,SAEpF/f,KAAKyoB,eAAgB,CACtB,CAED,YAAAi8B,CAAaxlD,GAEXc,KAAKyjB,SAASihC,aAAaxlD,EAC5B,CAED,QAAA2mD,CAASC,GAEP,MAAMtnB,EAAO,IAAI0jB,GAAQliD,KAAK4kD,YAAYxC,OAAQ0D,GAElD,OADA9lD,KAAK2lD,cAAcj7C,KAAK8zB,GACjBA,CACR,CAED,WAAAunB,CAAYC,GAEVvU,GAAeO,YAAYhyC,KAAK2lD,cAAeK,GAC/ChmD,KAAK7B,QAAO,EACb,CAED,MAAAA,CAAO8nD,GAEL,MAAMC,EAAmBlmD,KAAKwjB,SAAS9L,aAAa,gBAC9CyuC,EAAmBnmD,KAAKwjB,SAAS9L,aAAa,gBAE9CwtC,EAAiBllD,KAAKwjB,SAAS9L,aAAa,kBAC5C2tC,EAAiBrlD,KAAKwjB,SAAS9L,aAAa,kBAC5C4tC,EAAiBtlD,KAAKwjB,SAAS9L,aAAa,kBAC5C6tC,EAAiBvlD,KAAKwjB,SAAS9L,aAAa,kBAE5C0uC,EAAYpmD,KAAKwjB,SAAS9L,aAAa,SAE7C,IAAI2uC,GAAuC,IAAjBJ,EACtBK,GAAuC,IAAjBL,EACtBM,GAAuC,IAAjBN,EAEtBO,EAAc,EAClB,IAAK,IAAIl8C,EAAI,EAAGA,EAAItK,KAAK2lD,cAAc38C,OAAQsB,IAC/C,CACE,MAAMuU,EAAO7e,KAAK2lD,cAAcr7C,GAE5BuU,EAAKyjC,kBAEP+D,GAAsB,EACtBxnC,EAAK+jC,iBAGH/jC,EAAKwjC,iBAEPiE,GAAqB,EACrBznC,EAAKikC,qBAGHjkC,EAAK0jC,iBAEPgE,GAAqB,EACrB1nC,EAAKkkC,qBAGP,MAAMP,EAAS3jC,EAAK2jC,OACdrgC,EAAQtD,EAAKsD,MACb1V,EAAUoS,EAAKpS,QAErB,IAAK,IAAIg6C,EAAU,EAAGA,EAAU5nC,EAAKujC,OAAOp5C,OAAQy9C,IACpD,CACE,MAAM7C,EAAQ/kC,EAAKujC,OAAOqE,GAEpBC,EAAWF,EAEjBN,EAAiBS,QAAQD,EAAU9C,EAAM3B,aAAa5yC,EAAGu0C,EAAM3B,aAAa3yC,EAAGs0C,EAAM3B,aAAa7xC,EAAGwzC,EAAM3B,aAAa9xC,GACxHg2C,EAAiBQ,QAAQD,EAAU9C,EAAMz+B,SAAS9V,EAAGu0C,EAAMz+B,SAAS7V,EAAGs0C,EAAM9hC,MAAMzS,EAAGu0C,EAAM9hC,MAAMxS,GAElG41C,EAAeyB,QAAQD,EAAUlE,EAAOzzC,SAAS,GAC/CyzC,EAAOzzC,SAAS,GAChByzC,EAAOzzC,SAAS,GAChByzC,EAAOzzC,SAAS,IAElBs2C,EAAesB,QAAQD,EAAUlE,EAAOzzC,SAAS,GAC/CyzC,EAAOzzC,SAAS,GAChByzC,EAAOzzC,SAAS,GAChByzC,EAAOzzC,SAAS,IAElBu2C,EAAeqB,QAAQD,EAAUlE,EAAOzzC,SAAS,GAC/CyzC,EAAOzzC,SAAS,GAChByzC,EAAOzzC,SAAS,IAChByzC,EAAOzzC,SAAS,KAElBw2C,EAAeoB,QAAQD,EAAUlE,EAAOzzC,SAAS,IAC/CyzC,EAAOzzC,SAAS,IAChByzC,EAAOzzC,SAAS,IAChByzC,EAAOzzC,SAAS,KAElBq3C,EAAUO,QAAQD,EAAUvkC,EAAMrU,EAAGqU,EAAMjU,EAAGiU,EAAMhU,EAAG1B,GAEvD+5C,GACD,CACF,CAEDxmD,KAAKwjB,SAASwhC,cAAgBwB,EAE1BA,EAAcxmD,KAAKolD,iBAErBv+C,QAAQM,MAAM,iEAAkEnH,KAAKolD,gBAAiBoB,EAAaxmD,MAGjHqmD,IAEFnB,EAAerlC,aAAc,EAC7BwlC,EAAexlC,aAAc,EAC7BylC,EAAezlC,aAAc,EAC7B0lC,EAAe1lC,aAAc,GAE3BymC,IAEFJ,EAAiBrmC,aAAc,EAC/BsmC,EAAiBtmC,aAAc,GAE7B0mC,IAEFH,EAAUvmC,aAAc,EAE3B,CAED,OAAArhB,GAEEwB,KAAKwjB,SAAShlB,UACdwB,KAAKyjB,SAASjlB,SACf,EC7LH,MAAMooD,WAA2B/vC,GAE/B,WAAAlY,CAAYqU,EAAgBrE,EAAO,EAAGC,EAAK,EAAG4E,EAAkB,UAE9DzU,MAAMyU,GAENxT,KAAKgT,eAAiBA,EACtBhT,KAAK2O,KAAOA,EACZ3O,KAAK4O,GAAKA,CACX,CAED,MAAAzQ,CAAOuE,EAASoM,GAEd,MAAM+3C,EAAM7mD,KAAK2O,KAAKrG,QACtBu+C,EAAI73C,KAAKhP,KAAK4O,GAAI5O,KAAKwT,gBAAgB1E,IACvCpM,EAAQ1C,KAAKgT,gBAAgBmU,KAAK0/B,EACnC,ECbH,MAAMC,WAAkCroD,GAEtC,WAAAE,CAAYooD,GAEVhoD,MAAMgoD,utCACP,ECNH,MAAMC,WAA4BvoD,GAEhC,WAAAE,CAAYsoD,EAAgBF,GAE1BhoD,qLACD,CAED,UAAIksB,CAAO/rB,GAETc,KAAKhB,SAASkoD,QAAQhoD,MAAQA,CAC/B,CAED,UAAI+rB,GAEF,OAAOjrB,KAAKhB,SAASkoD,QAAQhoD,KAC9B,ECfH,MAAMioD,GAEJ,WAAAxoD,CAAYsoD,GAEVjnD,KAAKqtC,cAAiB,EACtBrtC,KAAKstC,eAAiB,EACtBttC,KAAKonD,IAAM,IAAI12B,EAAkB,EAAG,GACpC1wB,KAAKsrC,IAAM,IAAI5a,EAAkB,EAAG,GACpC1wB,KAAKurC,IAAM,IAAI7a,EAAkB,EAAG,GACpC1wB,KAAKqnD,IAAM,IAAI32B,EAAkB,EAAG,GACpC1wB,KAAKsnD,IAAM,IAAI52B,EAAkB,EAAG,GAEpC1wB,KAAKunD,iBAAqB,IAAIT,IAA0B,GACxD9mD,KAAKwnD,mBAAqB,IAAIV,IAA0B,GAExD9mD,KAAKynD,iBAAmB,IAAIT,EAC7B,CAED,IAAAvb,CAAKxjB,GAEHjoB,KAAK0nD,gBAAgBz/B,EAAGhJ,MAAOgJ,EAAGlI,QAClCgf,GAAS/P,KAAK/G,EAAUjoB,KAAKsrC,IAAKtrC,KAAKynD,kBAGvC1oB,GAAS/P,KAAKhvB,KAAKsrC,IAAKtrC,KAAKurC,IAAKvrC,KAAKwnD,oBACvCzoB,GAAS/P,KAAKhvB,KAAKurC,IAAKvrC,KAAKqnD,IAAKrnD,KAAKwnD,oBACvCzoB,GAAS/P,KAAKhvB,KAAKqnD,IAAKrnD,KAAKsnD,IAAKtnD,KAAKwnD,oBAIvCzoB,GAAS/P,KAAKhvB,KAAKsnD,IAAKtnD,KAAKqnD,IAAKrnD,KAAKunD,kBACvCxoB,GAAS/P,KAAKhvB,KAAKqnD,IAAKrnD,KAAKurC,IAAKvrC,KAAKunD,kBACvCxoB,GAAS/P,KAAKhvB,KAAKurC,IAAKtjB,EAAIjoB,KAAKunD,iBAIlC,CAED,eAAAG,CAAgBzoC,EAAOc,GAEjB/f,KAAKqtC,gBAAkBpuB,GAASjf,KAAKstC,iBAAmBvtB,IAE1D/f,KAAKqtC,cAAgBpuB,EACrBjf,KAAKstC,eAAiBvtB,EACtB/f,KAAKonD,IAAIt2B,QAAQ9wB,KAAKqtC,cAAgB,EAAGrtC,KAAKstC,eAAiB,GAC/DttC,KAAKsrC,IAAIxa,QAAQ9wB,KAAKqtC,cAAgB,EAAGrtC,KAAKstC,eAAiB,GAC/DttC,KAAKurC,IAAIza,QAAQ9wB,KAAKqtC,cAAgB,EAAGrtC,KAAKstC,eAAiB,GAC/DttC,KAAKqnD,IAAIv2B,QAAQ9wB,KAAKqtC,cAAgB,EAAGrtC,KAAKstC,eAAiB,GAC/DttC,KAAKsnD,IAAIx2B,QAAQ9wB,KAAKqtC,cAAgB,GAAIrtC,KAAKstC,eAAiB,IAEnE,EChDH,MAAMqa,WAA6BlpD,GAEjC,WAAAE,GAEEI,whEAAYmB,EAAW,CACrB0nD,WAAW,IAGb5nD,KAAKhB,SAAS6oD,WAAa,CAAE3oD,WAAOgB,GACpCF,KAAKhB,SAAS8oD,eAAiB,CAAE5oD,MAAO,IAAIE,EAAQ,EAAG,GACxD,CAED,WAAAonB,CAAYpmB,GAEVJ,KAAKhB,SAAS6oD,WAAW3oD,MAAQkB,EAEjC,MAAMgG,EAAOpG,KAAKkhD,SAAS9gD,GAC3BJ,KAAKhB,SAAS8oD,eAAe5oD,MAAMioB,KAAK/gB,EACzC,CAED,QAAA86C,CAAS9gD,GAEP,OAAIA,EAAI2nD,eAEC,IAAI3oD,EAAQ2O,KAAKP,IAAI,EAAGpN,EAAIqmB,MAAMuhC,YAAaj6C,KAAKP,IAAI,EAAGpN,EAAIqmB,MAAMwhC,cAE1E7nD,EAAIgvB,oBAEC,IAAIhwB,EAAQgB,EAAI6e,MAAO7e,EAAI2f,QAEhC3f,EAAI8nD,UAEC,IAAI9oD,EAAQgB,EAAIqmB,MAAMxH,MAAO7e,EAAIqmB,MAAM1G,QAEzC,IAAI3gB,EAAQ,EAAG,EACvB,ECpCH,MAAM+oD,GAEJ,WAAAxpD,CAAYgE,GAEV3C,KAAKioB,GAAK,IAAIyI,EAAkB,EAAG,EAAG,CACpCiG,KAAMC,EACNL,OAAQC,EACRH,UAAW1W,EACX2W,UAAW3W,IAEb3f,KAAKsrC,IAAM,IAAI5a,EAAkB,EAAG,EAAG,CACrCiG,KAAMC,EACNL,OAAQC,EACRH,UAAW1W,EACX2W,UAAW3W,IAGb3f,KAAKooD,kBAAoB,IAAIT,EAC9B,CAED,MAAAU,CAAOh5B,GAEL,MAAMi5B,EAAWtoD,KAAKkhD,SAAS7xB,GAC3Bi5B,EAASj5C,IAAMrP,KAAKioB,GAAGhJ,OAASqpC,EAASh5C,IAAMtP,KAAKioB,GAAGlI,SAEzD/f,KAAKioB,GAAG6I,QAAQw3B,EAASj5C,EAAGi5C,EAASh5C,GACrCtP,KAAKsrC,IAAIxa,QAAQw3B,EAASj5C,EAAGi5C,EAASh5C,IAGxCtP,KAAKooD,kBAAkB5hC,YAAY6I,GACnC0P,GAASrP,cAAc1vB,KAAKooD,kBAAmBpoD,KAAKioB,IAEpD,IAAK,IAAI3d,EAAI,EAAGA,EAAI,EAAGA,IAErBtK,KAAKooD,kBAAkB5hC,YAAYxmB,KAAKioB,GAAGoH,SAC3C0P,GAASrP,cAAc1vB,KAAKooD,kBAAmBpoD,KAAKsrC,KAEpDtrC,KAAKooD,kBAAkB5hC,YAAYxmB,KAAKsrC,IAAIjc,SAC5C0P,GAASrP,cAAc1vB,KAAKooD,kBAAmBpoD,KAAKioB,IAGtD,OAAOjoB,KAAKioB,EACb,CAED,QAAAi5B,CAAS9gD,GAEP,OAAIA,EAAI2nD,eAEC,IAAI3oD,EAAQ2O,KAAKP,IAAI,EAAGpN,EAAIqmB,MAAMuhC,YAAaj6C,KAAKP,IAAI,EAAGpN,EAAIqmB,MAAMwhC,cAE1E7nD,EAAIgvB,oBAEC,IAAIhwB,EAAQgB,EAAI6e,MAAO7e,EAAI2f,QAEhC3f,EAAI8nD,UAEC,IAAI9oD,EAAQgB,EAAIqmB,MAAMxH,MAAO7e,EAAIqmB,MAAM1G,QAEzC,IAAI3gB,EAAQ,EAAG,EACvB,EC3DH,MAAMmpD,GAEJ,WAAA5pD,CAAY6pD,EAAWC,GAErBzoD,KAAK+I,UAAO7I,EACZF,KAAK0oD,WAAQxoD,EAEbF,KAAK+D,KAAOykD,EAEZxoD,KAAKyoD,gBAAkBA,CACxB,CAED,kBAAAE,CAAmBnlC,GAGlB,CAED,mBAAAolC,CAAoBC,GAGnB,CAED,QAAAC,CAASC,GAEP,MAAMC,EAAaT,GAAkBU,qBAAqBF,GACpD/9B,EAAU,CACdqL,UAAW1W,EACX2W,UAAW3W,EACX4W,OAAQC,EACRC,WAAYC,EACZC,KAAM9D,GAAalR,sBAAwBiV,EAAYsyB,EACvDryB,eAAe,EACfC,aAAa,GAGf,OAAO,IAAIpG,EAAkBs4B,EAAW/pC,MAAO+pC,EAAWjpC,OAAQiL,EACnE,CAED,2BAAOi+B,CAAqBF,GAE1B,MAAM9pC,EAAQlR,KAAKR,IAAIw7C,EAAgB,KAEvC,MAAO,CAAE9pC,QAAOc,OADDhS,KAAKP,IAAI,EAAGO,KAAKgR,KAAKgqC,EAAiB9pC,IAEvD,CAED,OAAAkqC,GAEE,MAAMtC,EAAM7mD,KAAK+I,KACjB/I,KAAK+I,KAAO/I,KAAK0oD,MACjB1oD,KAAK0oD,MAAQ7B,CACd,CAED,MAAA1oD,CAAOirD,GAEDppD,KAAKyoD,kBAEPzoD,KAAKyoD,gBAAgBtqD,SACrBirD,EAAwB1lC,SAAS,GAAGD,SAAWzjB,KAAKyoD,gBACpDzoD,KAAKyoD,gBAAgBzpD,SAASC,SAASC,MAAQc,KAAK+I,KAAKsmB,QACzD0P,GAASt8B,OAAO2mD,OAAyBlpD,EAAWF,KAAK0oD,OACzDU,EAAwB1lC,SAAS,GAAGD,cAAWvjB,EAE/CF,KAAKmpD,UAER,CAED,8BAAAE,CAA+BpP,EAAWhyB,EAAIqhC,EAAkBF,GAE9DA,EAAwB1lC,SAAS,GAAGF,SAAS/E,aAAa,OAAQw7B,GAClEmP,EAAwB1lC,SAAS,GAAGD,SAAW6lC,EAE/CvqB,GAASt8B,OAAO2mD,OAAyBlpD,EAAW+nB,GAEpDmhC,EAAwB1lC,SAAS,GAAGF,SAAS+lC,gBAAgB,QAC7DH,EAAwB1lC,SAAS,GAAGD,cAAWvjB,CAChD,CAED,WAAAspD,GAEE,OAAOxpD,KAAK+I,KAAKsmB,OAClB,EC1EH,MAAMo6B,WAA0B5nC,EAE9B,WAAAljB,CAAYoqD,EAAgBtlC,GAE1B1kB,QACAiB,KAAKg6C,WAAa,GAElBh6C,KAAKmrB,KAAOnrB,KAAK0pD,iBAAiBX,EAAgBtlC,GAClDzjB,KAAKsM,IAAItM,KAAKmrB,MAEdnrB,KAAK2pD,uBAAyB3pD,KAAK4pD,6BAA6Bb,GAChE/oD,KAAKopD,wBAA0B,IAAIjmC,EACnCnjB,KAAKopD,wBAAwB98C,IAAItM,KAAK2pD,uBACvC,CAED,qBAAAE,CAAsBjsB,GAEpB59B,KAAKg6C,WAAWtvC,KAAKkzB,EACtB,CAED,0BAAAksB,CAA2B/lD,EAAM+tC,EAAOiY,GAEtC/pD,KAAK2pD,uBAAuBnmC,SAAS/E,aAAa1a,EAAM,IAAI85B,EAAgBiU,EAAOiY,GAAW,GAC/F,CAED,mBAAAC,CAAoBjmD,EAAM+tC,EAAOiY,GAE/B/pD,KAAKmrB,KAAK3H,SAAS/E,aAAa1a,EAAM,IAAIohD,EAAyBrT,EAAOiY,GAAW,GACtF,CAED,MAAA5rD,GAEE6B,KAAKmrB,KAAK1H,SAAStlB,SACnB,IAAK,IAAImM,EAAI,EAAGA,EAAItK,KAAKg6C,WAAWhxC,OAAQsB,IAE1CtK,KAAKg6C,WAAW1vC,GAAGnM,OAAO6B,KAAKopD,wBAElC,CAED,OAAA5qD,GAEEwB,KAAKmrB,KAAK3H,SAAShlB,UACnBwB,KAAKmrB,KAAK1H,SAASjlB,SACpB,CAED,gBAAAkrD,CAAiBO,EAAiB,EAAGxmC,GAEnC,MAAMymC,EAAM,IAAI/gC,EAEVghC,EAAgB,IAAIpF,EAC1BoF,EAAc1rC,aAAa,WAAYyrC,EAAIxyC,aAAa,aACxDyyC,EAAc1tB,MAAQytB,EAAIztB,MAE1B0tB,EAAc1rC,aAAa,aAAcze,KAAKoqD,2BAA2BH,IACzEE,EAAcnF,cAAgBiF,EAC9B,MAAM9+B,EAAO,IAAIvH,EAAKumC,EAAe1mC,GAErC,OADA0H,EAAK1C,eAAgB,EACd0C,CACR,CAED,4BAAAy+B,CAA6Bb,GAE3B,MAAM9pC,MAAEA,EAAKc,OAAEA,GAAWwoC,GAAkBU,qBAAqBF,GAE3DjrB,EAAM,IAAI9G,aAA8B,EAAjB+xB,GAE7B,IAAK,IAAIz+C,EAAI,EAAGA,EAAIy+C,EAAgBz+C,IACpC,CACE,MAAM+E,EAAI/E,EAAI2U,EACR3P,EAAIvB,KAAK4C,MAAMrG,EAAI2U,GACzB6e,EAAQ,EAAJxzB,EAAQ,IAAM+E,EAAI,IAAO4P,EAC7B6e,EAAQ,EAAJxzB,EAAQ,IAAMgF,EAAI,IAAOyQ,EAC7B+d,EAAQ,EAAJxzB,EAAQ,GAAKA,CAClB,CACD,MAAM4/C,EAAM,IAAI7nC,EAChB6nC,EAAIzrC,aAAa,WAAY,IAAIof,EAAgBC,EAAK,GAAG,IAEzD,MAAMzvB,EAAS,IAAIg8C,EAAOH,GAE1B,OADA77C,EAAOoa,eAAgB,EAChBpa,CACR,CAED,0BAAA+7C,CAA2BrB,GAEzB,MAAM9pC,MAAEA,EAAKc,OAAEA,GAAWwoC,GAAkBU,qBAAqBF,GAE3DjrB,EAAM,IAAI9G,aAA8B,EAAjB+xB,GAE7B,IAAK,IAAIz+C,EAAI,EAAGA,EAAIy+C,EAAgBz+C,IACpC,CACE,MAAM+E,EAAI/E,EAAI2U,EACR3P,EAAIvB,KAAK4C,MAAMrG,EAAI2U,GACzB6e,EAAQ,EAAJxzB,EAAQ,IAAM+E,EAAI,IAAO4P,EAC7B6e,EAAQ,EAAJxzB,EAAQ,IAAMgF,EAAI,IAAOyQ,CAC9B,CACD,OAAO,IAAIolC,EAAyBrnB,EAAK,GAAG,EAC7C,ECrGH,MAAMwsB,WAAgC5rD,EAEpC,WAAAC,GAcEI,MAAM,CACJC,SAAU,CAET,EACDM,aAhBW,kOAiBXC,wFACAC,YAAY,EACZC,SAAUC,EACVC,WAAW,EACXC,UAAWC,GAEd,EC5BH,MAAM0qD,WAAkChC,GAEtC,WAAA5pD,CAAY8pD,GAEV1pD,MAAM,YAAa0pD,EACpB,CAED,cAAA+B,CAAehnC,EAAU4lC,GAEvB,MAAMqB,EAAWjnC,EAAS9L,aAAa,YACvC1X,KAAK+I,KAAU/I,KAAK8oD,SAAS2B,EAAS9sB,OACtC39B,KAAK0oD,MAAU1oD,KAAK8oD,SAAS2B,EAAS9sB,OAEtC,MAAMhO,EAAM,IAAI26B,GAChBtqD,KAAKqpD,+BAA+B7lC,EAAS9L,aAAa,YAAa1X,KAAK+I,KAAM4mB,EAAKy5B,EACxF,CAED,eAAAsB,CAAgB1X,EAAWoW,GAEzBppD,KAAK+I,KAAU/I,KAAK8oD,SAAS9V,EAAUhqC,QACvChJ,KAAK0oD,MAAU1oD,KAAK8oD,SAAS9V,EAAUhqC,QAEvC,MAAMyH,EAAM,IAAIumB,aAAgC,EAAnBgc,EAAUhqC,QAEvC,IAAK,IAAIsB,EAAI,EAAGA,EAAI0oC,EAAUhqC,OAAQsB,IAEpCmG,EAAQ,EAAJnG,EAAQ,GAAK0oC,EAAU1oC,GAAG+E,EAC9BoB,EAAQ,EAAJnG,EAAQ,GAAK0oC,EAAU1oC,GAAGgF,EAC9BmB,EAAQ,EAAJnG,EAAQ,GAAK0oC,EAAU1oC,GAAG8F,EAC9BK,EAAQ,EAAJnG,EAAQ,GAA+B,IAAT,EAAhByD,KAAK6C,SAAe,GAExC,MAAM+e,EAAM,IAAI26B,GAChBtqD,KAAKqpD,+BAA+B,IAAIxrB,EAAgBptB,EAAK,GAAIzQ,KAAK+I,KAAM4mB,EAAKy5B,EAClF,ECpCH,MAAMuB,WAA0B7tB,EAE9B,WAAAn+B,CAAYuK,EAAM+V,EAAOc,EAAQwW,EAAQI,GAEvC53B,MAAMmK,EAAM+V,EAAOc,EAAQwW,EAAQI,GACnC32B,KAAK4qD,WAAa,CACnB,CAED,QAAAC,CAASpuB,EAAO3uB,EAAGI,EAAGC,EAAGmK,GAEvBtY,KAAKkJ,KAAa,EAARuzB,EAAY,GAAK3uB,EAAI9N,KAAK4qD,WACpC5qD,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKvuB,EAAIlO,KAAK4qD,WACpC5qD,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKtuB,EAAInO,KAAK4qD,WACpC5qD,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKnkB,EAAItY,KAAK4qD,WACpC5qD,KAAK6f,aAAc,CACpB,CAED,OAAAirC,CAAQruB,EAAO3uB,EAAGI,EAAGC,GAEnBnO,KAAKkJ,KAAa,EAARuzB,EAAY,GAAK3uB,EAAI9N,KAAK4qD,WACpC5qD,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKvuB,EAAIlO,KAAK4qD,WACpC5qD,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKtuB,EAAInO,KAAK4qD,WACpC5qD,KAAK6f,aAAc,CACpB,CAED,KAAAkrC,CAAMtuB,EAAOv9B,GAEXc,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKv9B,EAAQc,KAAK4qD,WACxC5qD,KAAK6f,aAAc,CACpB,CAED,KAAAmrC,CAAMvuB,EAAOv9B,GAEXc,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKv9B,EAAQc,KAAK4qD,WACxC5qD,KAAK6f,aAAc,CACpB,CAED,KAAAorC,CAAMxuB,EAAOv9B,GAEXc,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKv9B,EAAQc,KAAK4qD,WACxC5qD,KAAK6f,aAAc,CACpB,CAED,KAAAqrC,CAAMzuB,EAAOv9B,GAEXc,KAAKkJ,KAAa,EAARuzB,EAAY,GAAKv9B,EAAQc,KAAK4qD,WACxC5qD,KAAK6f,aAAc,CACpB,EC9CH,MAAMsrC,WAAuBR,GAE3B,WAAAhsD,CAAYsgB,EAAOc,GAGjBhhB,MADa,IAAI89B,WAAW5d,EAAQc,EAAS,GACjCd,EAAOc,EAAQyW,GAC3Bx2B,KAAK4qD,WAAa,GACnB,ECPH,MAAMQ,WAAwBT,GAE5B,WAAAhsD,CAAYsgB,EAAOc,GAGjBhhB,MADa,IAAI89B,WAAW5d,EAAQc,EAAS,GACjCd,EAAOc,EAAQyW,GAC3Bx2B,KAAK4qD,WAAa,GACnB,ECPH,MAAMS,WAA4BV,GAEhC,WAAAhsD,CAAYsgB,EAAOc,GAGjBhhB,MADa,IAAIi4B,aAAa/X,EAAQc,EAAS,GACnCd,EAAOc,EAAQyW,EAAYI,EACxC,ECLH,MAAM00B,WAA6BX,GAEjC,WAAAhsD,CAAYsgB,EAAOc,GAGjBhhB,MADa,IAAIi4B,aAAa/X,EAAQc,EAAS,GACnCd,EAAOc,EAAQyW,EAAYI,EACxC,ECJH,MAAM20B,WAAoB3nC,EAExB,WAAAjlB,CAAY6sD,EAAUhoC,EAAUC,EAAUgoC,GAExC1sD,MAAMykB,EAAUC,GAEhBzjB,KAAKwrD,SAAWA,EAChBxrD,KAAK0rD,cAAgB/5C,OAAOC,KAAK45C,GAAUxiD,OAC3ChJ,KAAKyrD,kBAAoBA,EACzBzrD,KAAKu5B,YAAcv5B,KAAK0rD,cAAgBD,EACxCzrD,KAAK2rD,aAAe59C,KAAKgR,KAAK/e,KAAK0rD,cAAgBD,EACpD,CAED,kBAAAG,CAAmB3xB,GAEjBj6B,KAAKyjB,SAASzkB,SAASi7B,GAAc/6B,MAAQ,IAAIisD,GAAenrD,KAAKu5B,YAAav5B,KAAK2rD,aACxF,CAED,mBAAAE,CAAoB5xB,GAElBj6B,KAAKyjB,SAASzkB,SAASi7B,GAAc/6B,MAAQ,IAAIksD,GAAgBprD,KAAKu5B,YAAav5B,KAAK2rD,aACzF,CAED,wBAAAG,CAAyB7xB,GAEvBj6B,KAAKyjB,SAASzkB,SAASi7B,GAAc/6B,MAAQ,IAAImsD,GAAoBrrD,KAAKu5B,YAAav5B,KAAK2rD,aAC7F,CAED,yBAAAI,CAA0B9xB,GAExBj6B,KAAKyjB,SAASzkB,SAASi7B,GAAc/6B,MAAQ,IAAIosD,GAAqBtrD,KAAKu5B,YAAav5B,KAAK2rD,aAC9F,CAED,cAAAK,CAAejoD,GAEb,OAAO/D,KAAKwrD,SAASznD,EACtB,CAED,aAAAkoD,CAAchyB,EAAciyB,EAAWp+C,EAAGI,EAAGC,GAE3CnO,KAAKyjB,SAASzkB,SAASi7B,GAAc6wB,QAAQ9qD,KAAKgsD,eAAeE,GAAYp+C,EAAGI,EAAGC,EACpF,CAED,cAAAg+C,CAAelyB,EAAciyB,EAAWp+C,EAAGI,EAAGC,EAAGmK,GAE/CtY,KAAKyjB,SAASzkB,SAASi7B,GAAc4wB,SAAS7qD,KAAKgsD,eAAeE,GAAYp+C,EAAGI,EAAGC,EAAGmK,EACxF,EC9CH,MAAM8zC,GAEJ,KAAAjvB,CAAMkvB,EAAQ5oC,GAEZ,MAMMm0B,EAAa,GACb4T,EAAW,CAAA,EAEXc,EAAe,GAErB,IAAK,IAAIhiD,EAAI,EAAGA,EAAI+hD,EAAOrjD,OAAQsB,IACnC,CACE,MAAM6gB,EAAOkhC,EAAO/hD,GACdozB,EAAevS,EAAK3H,SAAS9L,aAAa,YAAYimB,MAE5D,IAAK,IAAIA,EAAQ,EAAGA,EAAQD,EAAcC,IAExC2uB,EAAa5hD,KAAKJ,GAGpBstC,EAAWltC,KAAKygB,EAAK3H,eAEOtjB,IAAxBsrD,EAASrgC,EAAKpnB,MAEhBynD,EAASrgC,EAAKpnB,MAAQuG,EAItBzD,QAAQM,MAAM,4EAA6EgkB,EAAKpnB,KAAMynD,EAEzG,CAED,MAAM7mC,EAAkBC,GAAoBC,sBAAsB+yB,GAE5Dha,EAAmB,IAAIC,EAAgB,IAAI7G,aAAas1B,GAAe,GAG7E,OAFA3nC,EAAgBlG,aAAa,UAAWmf,GAEjC59B,KAAKusD,oBAAoBf,EAAU7mC,EAAiBlB,EAtCjC,KAuC3B,CAED,mBAAA8oC,CAAoBf,EAAU7mC,EAAiBlB,EAAUgoC,GAEvD,OAAO,IAAIF,GAAYC,EAAU7mC,EAAiBlB,EAAUgoC,EAC7D,ECjDH,MAAMe,WAA2BvmD,GAE/B,WAAAtH,CAAYuH,EAAaC,EAAKC,EAAMqmD,GAAQ,EAAMC,GAAmB,EAAOC,GAAuB,GAEjG5tD,MAAMmH,EAAaC,EAAKC,GAExBpG,KAAK4sD,aAAe,GAEpB5sD,KAAK2sD,qBAAuBA,EAC5B3sD,KAAK0sD,iBAAmBA,EACxB1sD,KAAKysD,MAAQA,CACd,CAED,qBAAAxjD,CAAsB5B,GAEhBG,GAAQxD,UAEVhE,KAAK6sD,qBAAqBxlD,GAI1BrH,KAAK8sD,qBAAqBzlD,EAE7B,CAED,oBAAAwlD,CAAqBxlD,GAEnB,QAAsDnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAC7C,CACE,MAAMkpB,EAAU,IAAI09B,GACdtmC,EAAQ,IAAIumC,MAElBvmC,EAAMwI,IAAMjvB,KAAKmG,IAEjBsgB,EAAMwmC,OAAS,KAEb59B,EAAQ5I,MAAQA,EAChB4I,EAAQo9B,MAAQzsD,KAAKysD,MACrBp9B,EAAQq9B,iBAAmB1sD,KAAK0sD,iBAChCr9B,EAAQoH,WAAaz2B,KAAK2sD,qBAAuBO,GAAiBC,GAClE99B,EAAQxP,aAAc,EAEtBxY,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkpB,GAE5DrvB,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,EAGxB0f,EAAM2mC,QAAU,KAEdvmD,QAAQM,MAAM,yCAA0CnH,KAAK4sD,aAAa,CAE7E,MAGCvlD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAER,CAED,oBAAA+lD,CAAqBzlD,GAEnB,QAAsDnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAC7C,CACE,MAAMknD,EAAe,CACrBA,YAA2B,eAG3B5lD,MAAMzH,KAAKmG,IAAKknD,GAAcvlD,MAAMwlD,GAE3BA,EAAI53B,SACV5tB,MAAM4tB,GAEA63B,kBAAkB73B,EAAM,CAC7Bi3B,qBAAsB3sD,KAAK2sD,qBAAuB,UAAY,OAC9Da,iBAAkBxtD,KAAKysD,MAAQ,QAAU,OACzCC,iBAAkB1sD,KAAK0sD,iBAAmB,cAAgB,WAE3D5kD,MAAM2lD,IAEP,MAAMp+B,EAAU,IAAI09B,GAAQU,GAC5Bp+B,EAAQo9B,MAAQzsD,KAAKysD,MACrBp9B,EAAQq9B,iBAAmB1sD,KAAK0sD,iBAChCr9B,EAAQoH,WAAaz2B,KAAK2sD,qBAAuBO,GAAiBC,GAClE99B,EAAQxP,aAAc,EAEtBxY,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkpB,GAE5DrvB,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IACrBkB,OAAOjC,IAERa,QAAQM,MAAMnB,EAAGhG,KAAK4sD,aAAa,GAEtC,MAGCvlD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAER,EC1GH,MAAM2mD,GAEJ,WAAA/uD,CAAYk1B,EAAQ85B,GAAO,EAAMC,EAAS,EAAGC,GAAa,GAExD7tD,KAAK6zB,OAASA,EACd7zB,KAAK2tD,KAAOA,EACZ3tD,KAAK4tD,OAASA,EACd5tD,KAAK6tD,WAAaA,EAElB7tD,KAAK8tD,WAAQ5tD,CACd,CAED,IAAA4C,CAAKirD,GAEC/tD,KAAK6tD,WAEP7tD,KAAK8tD,MAAQ,IAAIE,GAAiBD,GAIlC/tD,KAAK8tD,MAAQ,IAAIG,GAAOF,GAG1B/tD,KAAK8tD,MAAMI,UAAUluD,KAAK6zB,QAC1B7zB,KAAK8tD,MAAMK,QAAQnuD,KAAK2tD,MAGxB3tD,KAAK8tD,MAAMM,KAAKA,KAAKlvD,MAAQ,EAE7Bc,KAAK8tD,MAAMO,UAAUruD,KAAK2tD,KAAO,EAAI3tD,KAAK4tD,OAC3C,CAED,IAAA97C,GAEE9R,KAAK8tD,MAAMh8C,MACZ,CAED,KAAAw8C,GAEEtuD,KAAK8tD,MAAMQ,OACZ,CAED,IAAAv8C,GAEE/R,KAAK8tD,MAAM/7C,MACZ,CAED,cAAIw8C,GAEF,OAAOvuD,KAAK8tD,MAAMU,SACnB,EChDH,MAAMC,WAAoBxoD,GAExB,WAAAtH,CAAYuH,EAAaC,EAAKwnD,GAAO,EAAMC,EAAS,EAAGxnD,EAAMynD,GAAa,GAExE9uD,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAK2tD,KAAOA,EACZ3tD,KAAK4tD,OAASA,EACd5tD,KAAK6tD,WAAaA,CACnB,CAED,qBAAA5kD,CAAsB5B,QAQkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAK0uD,kBAAkBrnD,IAIvBA,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAGR,CAED,iBAAA2nD,CAAkBrnD,GAEhB,MAAM3E,EAAUisD,GAAa1wC,aAEvB4V,EAASnxB,EAAQksD,aAAa,EAAG,MAAO,OAE9CnnD,MAAMzH,KAAKmG,KAAK2B,MAAKgG,GAAKA,EAAE4nB,SAAQ5tB,MAAMM,IAEpCA,EAASymD,YAEXzmD,EAASymD,cAAc/mD,MAAMgnD,IAE3BpsD,EAAQqsD,gBAAgBD,GAAeE,IAErC3nD,EAAmBc,aACjBnI,KAAKkG,YACLlG,KAAKmG,IACL,IAAIunD,GAAUsB,EAAchvD,KAAK2tD,KAAM3tD,KAAK4tD,OAAQ5tD,KAAK6tD,aAG3D7tD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,GACtB,KAKJM,EAAmBc,aACjBnI,KAAKkG,YACLlG,KAAKmG,IACL,IAAIunD,GAAU75B,EAAQ7zB,KAAK2tD,KAAM3tD,KAAK4tD,OAAQ5tD,KAAK6tD,aAGrD7tD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBACN,GAEJ,ECxEH,MAAMkoD,WAAoBhpD,GAExB,WAAAtH,CAAYuH,EAAaC,EAAK+oD,EAAQ9oD,GAEpCrH,MAAMmH,EAAaC,EAAKC,GAExBpG,KAAKkvD,OAASA,CACf,CAED,qBAAAjmD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAMgpD,IAE1B9nD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKgpD,GAE5DnvD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,qLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECvCH,MAAMuoD,WAAsBrpD,GAE1B,WAAAtH,CAAYuH,EAAaC,EAAKopD,EAAWnpD,GAEvCrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIM,GAClBxvD,KAAKkvD,OAAOO,QAAQtpD,EAAM,KAC1BnG,KAAK0vD,KAAO,CACV,MAAMH,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IAET,CAED,qBAAAtmD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAK0vD,MAAOjpC,IAE3Bpf,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKsgB,GAE5DzmB,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCjoD,IAECnH,KAAKgH,YAAY,+EAAsFG,GACvGnH,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECjDH,MAAM4oD,WAAkB1pD,GAEtB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIU,EACnB,CAED,qBAAA3mD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM4xC,IAE1B1wC,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK4xC,GAE5D/3C,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,qLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxCH,MAAM8oD,WAAmB5pD,GAEvB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIY,EACnB,CAED,qBAAA7mD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM4pD,IAE1B1oD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK4pD,GAE5D/vD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,GACjBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxCH,MAAMipD,WAAmB/pD,GAEvB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIe,EACnB,CAED,qBAAAhnD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM2Y,IAE1BzX,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK2Y,GAE5D9e,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,iLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxCH,MAAMmpD,WAAwBjqD,GAE5B,WAAAtH,CAAYuH,EAAaC,EAAK+oD,EAAQ9oD,GAEpCrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIiB,GAElBnwD,KAAKkvD,OAAOkB,eAAelB,EAC5B,CAED,qBAAAjmD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM4xC,IAE1B1wC,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK4xC,GAE5D/3C,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,qLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,EC1CH,MAAMopD,WAAmBlqD,GAEvB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAImB,EACnB,CAED,qBAAApnD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM4xC,IAE1B1wC,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK4xC,GAE5D/3C,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IASCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,qLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxCH,MAAMupD,WAA6BrqD,GAEjC,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIqB,GAClBvwD,KAAKwwD,WAAa,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAC3E,CAED,qBAAAvnD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAOO,QAAQzvD,KAAKmG,KACtBsqD,YAAYC,IACZtpD,KAAKpH,KAAKwwD,YAAaG,IAEtBtpD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKwqD,GAE5D3wD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,qLACvBrvD,KAAK+G,iBAAiB,KAK1BM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,EC9CH,MAAM6pD,WAAmB3qD,GAEvB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,EACzB,CAED,qBAAA6C,CAAsB5B,EAAoBe,QAEclI,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CiC,EAASyoD,OAAO/oD,MAAM+oD,IAEpBxpD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK0qD,GAE5D7wD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxBH,MAAM+pD,WAAkB7qD,GAEtB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAI6B,EACnB,CAED,qBAAA9nD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAMisC,IAE1B/qC,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKisC,GAE5DpyC,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,iLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECvCH,MAAMiqD,WAAyB/qD,GAE7B,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIW,EACnB,CAED,qBAAA5mD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM0Y,IAE1BxX,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKnG,KAAKixD,WAAWpyC,IAE5E7e,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,GACjBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,CAED,UAAAkqD,CAAWC,GAET,MAAMC,EAAeD,EAAS5rD,MAAM,MAEU,KAA1C6rD,EAAaA,EAAanoD,OAAS,IAErCmoD,EAAaC,MAGf,MAAMpe,EAAY,GAElB,IAAK,IAAI1oC,EAAI,EAAGA,EAAI6mD,EAAanoD,OAAQsB,GAAK,EAC9C,CACE,MAAM+E,EAAIuI,WAAWu5C,EAAa7mD,EAAI,IAChCgF,EAAIsI,WAAWu5C,EAAa7mD,EAAI,IAChC8F,EAAIwH,WAAWu5C,EAAa7mD,EAAI,IACtC0oC,EAAUtoC,KAAK,IAAIsX,EAAQ3S,EAAGC,EAAGc,GAClC,CACD,OAAO4iC,CAGR,EChEH,MAAMqe,WAA0BprD,GAE9B,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIoC,EACnB,CAED,qBAAAroD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAMwqD,IAE1BtpD,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKwqD,GAE5D3wD,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,EAAM,qLACvBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxCH,MAAMwqD,WAAmBtrD,GAEvB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,GACxBpG,KAAKkvD,OAAS,IAAIY,EACnB,CAED,qBAAA7mD,CAAsB5B,QAEkCnH,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CnG,KAAKkvD,OAAO9nD,KAAKpH,KAAKmG,KAAM4xC,IAE1B1wC,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK4xC,GAE5D/3C,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,IAEvBqoD,IAAD,IAQCC,IAECrvD,KAAKgH,YAAYqoD,GACjBrvD,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,ECxCH,MAAMyqD,WAAsBvrD,GAE1B,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,EACzB,CAED,qBAAA6C,CAAsB5B,EAAoBe,QAEclI,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CiC,EAASstB,OAAO5tB,MAAM4tB,IAEpB,MAAMrG,EAAU,IAAI09B,GAEd5mD,EAAM2vB,IAAIC,gBAAgBL,GAE1BjP,EAAQ,IAAIumC,MAClBvmC,EAAMwI,IAAM9oB,EAEZsgB,EAAMwmC,OAAS,KAEb59B,EAAQ5I,MAAQA,EAChB4I,EAAQxP,aAAc,EAEtBxY,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkpB,GAE5DrvB,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,EAGxB0f,EAAM2mC,QAAU,KAEdvmD,QAAQM,MAAM,6DAA8DnH,KAAKmG,IAAI,CACtF,KAKHkB,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,EC9CH,MAAM0qD,WAAoBxrD,GAExB,WAAAtH,CAAYuH,EAAaC,EAAKC,GAE5BrH,MAAMmH,EAAaC,EAAKC,EACzB,CAED,qBAAA6C,CAAsB5B,EAAoBe,QAEclI,IAAlDmH,EAAmBC,iBAAiBtH,KAAKmG,KAE3CiC,EAASstB,OAAO5tB,MAAM4tB,IAEpBruB,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAK2vB,IAAIC,gBAAgBL,IAEhF11B,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,iBAAiB,KAKxBM,EAAmBc,aAAanI,KAAKkG,YAAalG,KAAKmG,IAAKkB,EAAmBC,iBAAiBtH,KAAKmG,MAErGnG,KAAK0G,0BAA0B,EAAG,GAClC1G,KAAK+G,kBAER,EC1BH,MAAM2qD,GAEJ,WAAA/yD,CAAYgzD,GAEV3xD,KAAK4xD,iBAAmB,GACxB5xD,KAAK2xD,WAAaA,GAAc,eACjC,CAED,UAAAE,CAAW3C,GAETlvD,KAAK4xD,iBAAiBlnD,KAAKwkD,EAC5B,CAED,IAAA9nD,CAAKC,GAEH,IAAK,IAAIiD,EAAI,EAAGA,EAAItK,KAAK4xD,iBAAiB5oD,OAAQsB,IAEhDtK,KAAK4xD,iBAAiBtnD,GAAGlD,KAAKC,GAAsB4gC,GAEvD,CAED,oBAAI6pB,GAEF,IAAIC,GAAW,EACf,IAAK,IAAIznD,EAAI,EAAGA,EAAItK,KAAK4xD,iBAAiB5oD,OAAQsB,IAEhDynD,EAAWA,GAAY/xD,KAAK4xD,iBAAiBtnD,GAAG/D,aAElD,OAAOwrD,CACR,CAED,cAAIC,GAEF,IAAIxrD,GAAY,EAChB,IAAK,IAAI8D,EAAI,EAAGA,EAAItK,KAAK4xD,iBAAiB5oD,OAAQsB,IAEhD9D,EAAYA,GAAaxG,KAAK4xD,iBAAiBtnD,GAAG9D,UAEpD,OAAOA,CACR,CAED,YAAAyrD,GAEEprD,QAAQM,MAAM,UAAYnH,KAAK2xD,WAAa,iCAC5C,IAAK,IAAIrnD,EAAI,EAAGA,EAAItK,KAAK4xD,iBAAiB5oD,OAAQsB,IAE5CtK,KAAK4xD,iBAAiBtnD,GAAG9D,WAE3BxG,KAAK4xD,iBAAiBtnD,GAAGpD,aAG9B,CAED,YAAAqL,GAEE,OAAOvS,KAAKkyD,mBAAqBlyD,KAAKmyD,iBACvC,CAED,gBAAAD,GAEE,IAAI7rD,EAAe,EAEnB,IAAK,IAAIiE,EAAI,EAAGA,EAAItK,KAAK4xD,iBAAiB5oD,OAAQsB,IAEhDjE,GAAgBrG,KAAK4xD,iBAAiBtnD,GAAGjE,aAG3C,OAAOA,CACR,CAED,eAAA8rD,GAEE,IAAI7rD,EAAc,EAElB,IAAK,IAAIgE,EAAI,EAAGA,EAAItK,KAAK4xD,iBAAiB5oD,OAAQsB,IAEhDhE,GAAetG,KAAK4xD,iBAAiBtnD,GAAGhE,YAG1C,OAAOA,CACR"}