@lumiscaphe/viewer 4.1.2 → 4.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Scene.d.ts +2 -1
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Resolution.ts","../src/Viewport.ts","../src/Canvas2D.ts","../src/Canvas3D.ts","../src/Maths.ts","../src/PointOfView.ts","../src/Spherical.ts","../src/WebRenderStatic.ts","../src/Database.ts","../src/WebRenderV1.ts","../node_modules/tslib/tslib.es6.js","../src/WebRenderV2.ts","../src/Loader.ts","../src/Video.ts","../src/WidgetImage.ts","../src/WidgetVideo.ts","../src/Point.ts","../src/EventHelper.ts","../src/Basis3.ts","../src/InertiaPoint.ts","../src/Inertia.ts","../src/InteractiveCamera.ts","../src/WidgetVRCube.ts","../src/InteractivePosition.ts","../src/WidgetVRObject.ts","../src/WRAPIv2.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/Viewer.ts"],"sourcesContent":["export class Resolution {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n get aspect() {\n return this.width / this.height;\n }\n}\n","import { Resolution } from './Resolution';\nexport class Viewport {\n constructor(top, left, width, height) {\n this.top = top;\n this.left = left;\n this.width = width;\n this.height = height;\n }\n static contains(resolution, position) {\n return position.x >= 0 && position.x < resolution.width && position.y >= 0 && position.y < resolution.height;\n }\n static fit(resolution, viewportResolution, fit) {\n const aspectRatio = resolution.aspect;\n const viewportRatio = viewportResolution.aspect;\n let width = 0;\n let height = 0;\n switch (fit) {\n case 'contain':\n width = viewportRatio < aspectRatio ? viewportResolution.width : viewportResolution.height * aspectRatio;\n height = viewportRatio < aspectRatio ? viewportResolution.width / aspectRatio : viewportResolution.height;\n break;\n case 'cover':\n default:\n width = viewportRatio < aspectRatio ? viewportResolution.height * aspectRatio : viewportResolution.width;\n height = viewportRatio < aspectRatio ? viewportResolution.height : viewportResolution.width / aspectRatio;\n break;\n case 'fill':\n width = viewportResolution.width;\n height = viewportResolution.height;\n break;\n }\n const top = (viewportResolution.height - height) / 2;\n const left = (viewportResolution.width - width) / 2;\n return new Viewport(top, left, width, height);\n }\n static project(resolution, viewportResolution, fit, position) {\n const viewport = Viewport.fit(resolution, viewportResolution, fit);\n const scaleX = viewport.width / resolution.width;\n const scaleY = viewport.height / resolution.height;\n return {\n x: Math.round(viewport.left + position.x * scaleX),\n y: Math.round(viewport.top + position.y * scaleY)\n };\n }\n static unproject(resolution, viewportResolution, fit, position) {\n const viewport = Viewport.fit(resolution, viewportResolution, fit);\n const scaleX = viewport.width / resolution.width;\n const scaleY = viewport.height / resolution.height;\n return {\n x: Math.round((position.x - viewport.left) / scaleX),\n y: Math.round((position.y - viewport.top) / scaleY)\n };\n }\n static getStandardAspectRatio(width, height) {\n if (width === 0 || height === 0) {\n return 0;\n }\n const aspectRatio = width / height;\n if (width < height) {\n const distanceTo34 = Math.abs(3 / 4 - aspectRatio);\n const distanceTo916 = Math.abs(9 / 16 - aspectRatio);\n return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;\n }\n const distanceTo43 = Math.abs(4 / 3 - aspectRatio);\n const distanceTo169 = Math.abs(16 / 9 - aspectRatio);\n return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;\n }\n static getStandardResolution(width, height) {\n if (width === 0 || height === 0) {\n return new Resolution(0, 0);\n }\n const aspectRatio = Viewport.getStandardAspectRatio(width, height);\n if (width < height) {\n const quality = Viewport.getStandardQuality(Math.max(height * aspectRatio, width));\n return new Resolution(Math.round(quality), Math.round(quality / aspectRatio));\n }\n const quality = Viewport.getStandardQuality(Math.max(width / aspectRatio, height));\n return new Resolution(Math.round(quality * aspectRatio), Math.round(quality));\n }\n static getStandardQuality(height) {\n if (height <= 240) {\n return 240;\n }\n if (height <= 360) {\n return 360;\n }\n if (height <= 480) {\n return 480;\n }\n if (height <= 720) {\n return 720;\n }\n return 1080;\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class Canvas2D {\n constructor(fit) {\n this.element = document.createElement('canvas');\n this.element.classList.add('ls-viewer-canvas');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.context = this.element.getContext('2d');\n this.backCanvas = document.createElement('canvas');\n this.backContext = this.backCanvas.getContext('2d');\n this.fit = fit;\n this.pixelRatio = 1;\n }\n destroy() {\n if (this.requestAnimationId) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n }\n }\n show(useDisplay) {\n if (useDisplay) {\n this.element.style.display = 'block';\n }\n else {\n this.element.style.opacity = '1';\n }\n }\n hide(useDisplay) {\n if (useDisplay) {\n this.element.style.display = 'none';\n }\n else {\n this.element.style.opacity = '0';\n }\n }\n get resolution() {\n return new Resolution(this.element.width / this.pixelRatio, this.element.height / this.pixelRatio);\n }\n resize(width, height, pixelRatio) {\n this.element.width = width * pixelRatio;\n this.element.height = height * pixelRatio;\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n this.backCanvas.width = width * pixelRatio;\n this.backCanvas.height = height * pixelRatio;\n this.pixelRatio = pixelRatio;\n }\n draw(img, fade, speed) {\n if (!img) {\n return;\n }\n if (this.requestAnimationId) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n }\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\n if (fade) {\n this.backContext.drawImage(this.element, 0, 0);\n this.context.globalAlpha = 0.0;\n this.fadeLoop(img, speed || 0);\n }\n else {\n this.context.globalAlpha = 1.0;\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\n }\n this.image = img;\n }\n fadeLoop(img, speed) {\n if (this.context.globalAlpha >= 1.0) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n return;\n }\n const alpha = Math.min(this.context.globalAlpha + speed, 1.0);\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\n this.context.clearRect(0, 0, this.element.width, this.element.height);\n this.context.globalAlpha = 1.0;\n this.context.drawImage(this.backCanvas, 0, 0);\n this.context.globalAlpha = alpha;\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\n this.requestAnimationId = requestAnimationFrame(() => {\n this.fadeLoop(img, speed);\n });\n }\n}\n","import * as twgl from 'twgl.js';\nexport class Canvas3D {\n constructor() {\n this.element = document.createElement('canvas');\n this.element.classList.add('ls-viewer-canvas');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.context = twgl.getContext(this.element, { preserveDrawingBuffer: true });\n twgl.setDefaultTextureColor([1, 1, 1, 1]);\n }\n show() {\n this.element.style.opacity = '1';\n }\n hide() {\n this.element.style.opacity = '0';\n }\n resize(width, height, pixelRatio) {\n this.element.width = width * pixelRatio;\n this.element.height = height * pixelRatio;\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n }\n}\n","export class Maths {\n static accelerate(v, f) {\n const factor = f || 1.5;\n return Math.abs(v) ** factor * (v > 0 ? 1 : -1);\n }\n static clamp(v, min, max) {\n return Math.max(Math.min(v, max), min);\n }\n static degreesToRadians(a) {\n return a * (Math.PI / 180);\n }\n static radiansToDegrees(a) {\n return a * (180 / Math.PI);\n }\n static mod(x, y) {\n return x - y * Math.floor(x / y);\n }\n static perspectiveWithFovX(fovX, aspect, near, far, dst) {\n const right = Math.tan(fovX / 2.0);\n const top = right / aspect;\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\n }\n static perspectiveWithFovY(fovY, aspect, near, far, dst) {\n const top = near * Math.tan(fovY / 2.0);\n const right = top * aspect;\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\n }\n static perspectiveWithLeft(left, right, bottom, top, near, far, dst) {\n dst = dst || new Float32Array(16);\n const ral = right + left;\n const rsl = right - left;\n const tab = top + bottom;\n const tsb = top - bottom;\n const fsn = far - near;\n dst[0] = (2 * near) / rsl;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = (2 * near) / tsb;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = ral / rsl;\n dst[9] = tab / tsb;\n dst[10] = -far / fsn;\n dst[11] = -1.0;\n dst[12] = 0.0;\n dst[13] = 0.0;\n dst[14] = (-far * near) / fsn;\n dst[15] = 0.0;\n return dst;\n }\n}\n","import { m4, v3 } from 'twgl.js';\nexport class PointOfView {\n static initCubeFace(eye, target, face) {\n let up = [0, 0, 0];\n const v = v3.subtract(target, eye);\n const c = v3.mulScalar([0, 1, 0], v3.length(v));\n const b = v3.mulScalar(v3.normalize(v3.cross(v, c)), v3.length(v));\n const a = v3.mulScalar(v3.normalize(v3.cross(c, b)), v3.length(v));\n switch (face) {\n case 'front':\n target = v3.add(eye, a);\n up = v3.normalize(c);\n break;\n case 'right':\n target = v3.add(eye, b);\n up = v3.normalize(c);\n break;\n case 'back':\n target = v3.subtract(eye, a);\n up = v3.normalize(c);\n break;\n case 'left':\n target = v3.subtract(eye, b);\n up = v3.normalize(c);\n break;\n case 'up':\n target = v3.add(eye, c);\n up = v3.normalize(v3.mulScalar(a, -1));\n break;\n case 'down':\n target = v3.subtract(eye, c);\n up = v3.normalize(a);\n break;\n }\n return new PointOfView(target, eye, up);\n }\n constructor(target, eye, up) {\n this.target = v3.copy(target);\n this.eye = v3.copy(eye);\n this.up = v3.copy(up);\n }\n get viewVector() {\n return v3.subtract(this.target, this.eye);\n }\n get rightVector() {\n return v3.normalize(v3.cross(this.viewVector, this.up));\n }\n get viewMatrix() {\n return m4.inverse(m4.lookAt(this.eye, this.target, this.up));\n }\n clone() {\n return new PointOfView(v3.copy(this.target), v3.copy(this.eye), v3.copy(this.up));\n }\n}\nPointOfView.default = new PointOfView([0.0, 0.0, 0.0], [2.0, 2.0, 2.0], [0.0, 1.0, 0.0]);\n","import { m4, v3 } from 'twgl.js';\nimport { PointOfView } from './PointOfView';\nexport class Spherical {\n constructor(pov) {\n this.target = pov.target;\n const view = v3.normalize(v3.subtract(pov.eye, pov.target));\n const x = v3.dot(view, [1, 0, 0]);\n const y = v3.dot(view, [0, 1, 0]);\n const z = v3.dot(view, [0, 0, 1]);\n this.longitude = Math.atan2(x, z);\n this.latitude = Math.atan2(y, Math.sqrt(x * x + z * z));\n if (v3.dot(pov.up, [0, 1, 0]) < 0) {\n this.longitude = Math.PI + this.longitude;\n this.latitude = Math.PI - this.latitude;\n }\n this.distance = v3.length(v3.subtract(pov.target, pov.eye));\n }\n get vector() {\n const x1 = Math.cos(this.latitude) * this.distance;\n const y1 = Math.sin(this.latitude) * this.distance;\n const x2 = Math.cos(this.longitude) * x1;\n const z2 = Math.sin(this.longitude) * x1;\n return [x2, y1, z2];\n }\n pointOfView(target) {\n const alphaMatrix = m4.rotationY(this.longitude);\n const betaMatrix = m4.rotationX(-this.latitude);\n const rollMatrix = m4.rotationZ(0);\n const m = m4.multiply(alphaMatrix, m4.multiply(betaMatrix, rollMatrix));\n let view = [0.0, 0.0, -1.0];\n view = m4.transformPoint(m, view);\n let up = [0.0, 1.0, 0.0];\n up = m4.transformPoint(m, up);\n const eye = v3.subtract(target, v3.mulScalar(view, this.distance));\n return new PointOfView(target, eye, up);\n }\n}\n","export class WebRenderStatic {\n constructor() { }\n async animation(snapshot) {\n return snapshot.scene;\n }\n async database(databaseId) {\n throw new Error('Unavailable');\n }\n async image(snapshot) {\n return snapshot.scene;\n }\n async video(snapshot) {\n return snapshot.scene;\n }\n async vrCube(snapshot) {\n return snapshot.scene;\n }\n async vrObject(snapshot) {\n return snapshot.scene;\n }\n}\n","import { PointOfView } from './PointOfView';\nexport class Database {\n constructor(xmlDoc) {\n this.xmlDoc = xmlDoc;\n }\n get id() {\n var _a;\n return (_a = this.xmlDoc.getElementsByTagName('Database')[0]) === null || _a === void 0 ? void 0 : _a.getAttribute('id');\n }\n getCameraId(cameraName, cameraGroup) {\n var _a, _b;\n if (cameraGroup) {\n return (_a = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${cameraGroup}\"] Camera[name=\"${cameraName}\"]`)) === null || _a === void 0 ? void 0 : _a.getAttribute('id');\n }\n else {\n return (_b = this.xmlDoc.querySelector(`RootCameraGroup Camera[name=\"${cameraName}\"]`)) === null || _b === void 0 ? void 0 : _b.getAttribute('id');\n }\n }\n getCameraById(cameraId, groupId) {\n let element;\n if (cameraId && groupId) {\n element = this.xmlDoc.querySelector(`RootCameraGroup Group[id=\"${groupId}\"] Camera[id=\"${cameraId}\"]`);\n }\n else {\n element = this.xmlDoc.querySelector(`RootCameraGroup Camera[id=\"${cameraId}\"]`);\n }\n return element ? this.mapElementToCamera(element) : null;\n }\n getCameraByName(cameraName, groupName) {\n let element;\n if (groupName && cameraName) {\n element = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${groupName}\"] Camera[name=\"${cameraName}\"]`);\n }\n else {\n element = this.xmlDoc.querySelector(`RootCameraGroup Camera[name=\"${cameraName}\"]`);\n }\n return element ? this.mapElementToCamera(element) : null;\n }\n getCameraGroupId(cameraGroup) {\n var _a;\n return (_a = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${cameraGroup}\"]`)) === null || _a === void 0 ? void 0 : _a.getAttribute('id');\n }\n getCameraGroupById(id) {\n const element = this.xmlDoc.querySelector(`RootCameraGroup Group[id=\"${id}\"]`);\n return element ? this.mapElementToCameraGroup(element) : null;\n }\n getCameraGroupByName(name) {\n const element = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${name}\"]`);\n return element ? this.mapElementToCameraGroup(element) : null;\n }\n mapElementToCamera(element) {\n return {\n id: element.getAttribute('id'),\n name: element.getAttribute('name'),\n pointOfView: new PointOfView([\n parseFloat(element.querySelector('PointOfView Target').getAttribute('x')),\n parseFloat(element.querySelector('PointOfView Target').getAttribute('y')),\n parseFloat(element.querySelector('PointOfView Target').getAttribute('z'))\n ], [\n parseFloat(element.querySelector('PointOfView Eye').getAttribute('x')),\n parseFloat(element.querySelector('PointOfView Eye').getAttribute('y')),\n parseFloat(element.querySelector('PointOfView Eye').getAttribute('z'))\n ], [\n parseFloat(element.querySelector('PointOfView Up').getAttribute('x')),\n parseFloat(element.querySelector('PointOfView Up').getAttribute('y')),\n parseFloat(element.querySelector('PointOfView Up').getAttribute('z'))\n ])\n };\n }\n mapElementToCameraGroup(element) {\n return {\n id: element.getAttribute('id'),\n name: element.getAttribute('name'),\n cameras: [...element.querySelectorAll('Camera')].map(el => this.mapElementToCamera(el))\n };\n }\n}\n","import { Database } from './Database';\nexport class WebRenderV1 {\n constructor(server) {\n this.server = server;\n }\n static buildQuery(request) {\n return Object.entries(request)\n .filter(([k, v]) => v !== null && v !== undefined)\n .map(([k, v]) => `${k}=${v}`)\n .join('&');\n }\n static sceneParameters(snapshot) {\n var _a, _b;\n const scene = snapshot.scene;\n const accessory = scene.length > 1 ? scene.find(p => p.accessory) : null;\n const decor = scene.length > 1 ? scene.find(p => p.decor) : null;\n const product = scene.find(p => p !== accessory && p !== decor);\n return {\n databaseId: product.database,\n configuration: product === null || product === void 0 ? void 0 : product.configuration,\n animations: (_a = product === null || product === void 0 ? void 0 : product.animations) === null || _a === void 0 ? void 0 : _a.join('/'),\n accessoryDatabaseId: accessory === null || accessory === void 0 ? void 0 : accessory.database,\n decorDatabaseId: decor === null || decor === void 0 ? void 0 : decor.database,\n decorDeltaAltitude: (_b = decor === null || decor === void 0 ? void 0 : decor.translation) === null || _b === void 0 ? void 0 : _b.y\n };\n }\n static renderParameters(snapshot) {\n const { parameters, view } = snapshot;\n return {\n background: view.background,\n width: parameters.width,\n height: parameters.height,\n softwareAntialiasing: parameters.antialiasing,\n superSampling: parameters.superSampling\n };\n }\n static encoderParameters(snapshot) {\n const { encoder } = snapshot;\n return {\n imageFormat: encoder.format,\n imageQuality: encoder.quality\n };\n }\n static async fetch(url) {\n return fetch(url)\n .then(response => response.text())\n .then(responseText => {\n const xml = responseText.replace(/&/g, '&');\n const matches = xml.match(this.xmlRegex);\n if (!matches) {\n return Promise.reject();\n }\n return matches.map(m => m.replace(this.xmlRegex, '$1'));\n });\n }\n async animation(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], frames: snapshot.view.frames, loop: !!snapshot.view.loop }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/ImagesFromAnimation?${queryString}`);\n }\n async database(databaseId) {\n return fetch(`${this.server}/Database?databaseId=${databaseId}`)\n .then(response => response.text())\n .then(responseText => {\n const xmlDoc = new DOMParser().parseFromString(responseText, 'application/xml');\n return new Database(xmlDoc);\n });\n }\n async image(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return Promise.resolve(`${this.server}/ImageFromBookmark?${queryString}`);\n }\n async video(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], duration: snapshot.view.duration, frames: snapshot.view.frames, loop: !!snapshot.view.loop, reverse: !!snapshot.view.reverse }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return Promise.resolve(`${this.server}/ImagesFromAnimation?${queryString}`);\n }\n async vrCube(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n request.width = Math.max(request.width, request.height);\n request.height = Math.max(request.width, request.height);\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/CubeFromBookmark?${queryString}`);\n }\n async vrObject(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/ImagesFromBookmarkSet?${queryString}`);\n }\n}\nWebRenderV1.xmlRegex = /directUrl=\"([^\"]*)\"/g;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import { __rest } from \"tslib\";\nimport { Database } from './Database';\nexport class WebRenderV2 {\n constructor(server) {\n this.server = server;\n }\n static scene(snapshot) {\n return snapshot.scene.map(p => {\n const { accessory, decor } = p, pResult = __rest(p, [\"accessory\", \"decor\"]);\n return pResult;\n });\n }\n static renderParameters(snapshot) {\n return Object.assign(Object.assign({}, snapshot.parameters), { superSampling: snapshot.parameters.superSampling.toString() });\n }\n static encoder(snapshot) {\n switch (snapshot.encoder.format) {\n case 'jpeg':\n return {\n jpeg: {\n quality: snapshot.encoder.quality\n }\n };\n case 'png':\n return {\n png: {\n compression: snapshot.encoder.compression\n }\n };\n case 'webp':\n return {\n webp: {\n quality: snapshot.encoder.quality\n }\n };\n }\n return {\n jpeg: {\n quality: 80\n }\n };\n }\n static async fetchFrame(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) })\n .then(response => response.json())\n .then((data) => {\n return data.url;\n });\n }\n static async fetchFrameArray(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) })\n .then(response => response.json())\n .then((data) => {\n return data.map(f => f.url);\n });\n }\n static async fetchHotspots(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json());\n }\n static async fetchHotspotsArray(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json());\n }\n static async fetchPick(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) })\n .then(response => response.json())\n .then((response) => response[0]);\n }\n async database(databaseId) {\n return fetch(`${this.server}/Database?databaseId=${databaseId}`)\n .then(response => response.text())\n .then(responseText => {\n const xmlDoc = new DOMParser().parseFromString(responseText, 'application/xml');\n return new Database(xmlDoc);\n });\n }\n async image(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n image: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrame(`${this.server}/Snapshot`, body);\n }\n async vrCube(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n vrCube: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async vrObject(snapshot) {\n let mode;\n if (snapshot.view.cameraGroup) {\n mode = {\n images: {\n cameraGroup: snapshot.view.cameraGroup\n }\n };\n }\n else {\n if (snapshot.view.frames) {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n frames: snapshot.view.frames\n }\n };\n }\n else {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n panFrames: snapshot.view.panFrames || 1,\n panFrom: snapshot.view.panFrom || 0,\n panTo: snapshot.view.panTo || 0,\n panLoop: snapshot.view.panLoop || false,\n tiltFrames: snapshot.view.tiltFrames || 1,\n tiltFrom: snapshot.view.tiltFrom || 0,\n tiltTo: snapshot.view.tiltTo || 0,\n tiltLoop: snapshot.view.tiltLoop || false\n }\n };\n }\n }\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode,\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async animation(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n animation: {\n id: snapshot.view.animation,\n camera: snapshot.view.camera,\n fps: snapshot.view.fps\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async imageHotspots(snapshot, hotspots) {\n const body = Object.assign({ scene: WebRenderV2.scene(snapshot), mode: {\n image: {\n camera: snapshot.view.camera\n }\n }, renderParameters: WebRenderV2.renderParameters(snapshot) }, this.hotspotsBody(hotspots));\n return await WebRenderV2.fetchHotspots(`${this.server}/Hotspot`, body);\n }\n async imagePick(snapshot, position) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n camera: snapshot.view.camera,\n renderParameters: WebRenderV2.renderParameters(snapshot),\n positions: [position]\n };\n return await WebRenderV2.fetchPick(`${this.server}/Pick`, body);\n }\n async vrCubeHotspots(snapshot, hotspots) {\n const body = Object.assign({ scene: WebRenderV2.scene(snapshot), mode: {\n vrCube: {\n camera: snapshot.view.camera\n }\n }, renderParameters: WebRenderV2.renderParameters(snapshot) }, this.hotspotsBody(hotspots));\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\n }\n async vrObjectHotspots(snapshot, hotspots) {\n let mode;\n if (snapshot.view.cameraGroup) {\n mode = {\n images: {\n cameraGroup: snapshot.view.cameraGroup\n }\n };\n }\n else {\n if (snapshot.view.frames) {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n frames: snapshot.view.frames\n }\n };\n }\n else {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n panFrames: snapshot.view.panFrames || 1,\n panFrom: snapshot.view.panFrom || 0,\n panTo: snapshot.view.panTo || 0,\n panLoop: snapshot.view.panLoop || false,\n tiltFrames: snapshot.view.tiltFrames || 1,\n tiltFrom: snapshot.view.tiltFrom || 0,\n tiltTo: snapshot.view.tiltTo || 0,\n tiltLoop: snapshot.view.tiltLoop || false\n }\n };\n }\n }\n const body = Object.assign({ scene: WebRenderV2.scene(snapshot), mode, renderParameters: WebRenderV2.renderParameters(snapshot) }, this.hotspotsBody(hotspots));\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\n }\n hotspotsBody(hotspots) {\n return {\n positions: hotspots.every(hotspot => typeof hotspot !== 'string') ? hotspots : undefined,\n tags: hotspots.every(hotspot => typeof hotspot === 'string') ? hotspots : undefined\n };\n }\n}\n","import { Maths } from './Maths';\nimport { PointOfView } from './PointOfView';\nimport { Spherical } from './Spherical';\nimport { WebRenderStatic } from './WebRenderStatic';\nimport { WebRenderV1 } from './WebRenderV1';\nimport { WebRenderV2 } from './WebRenderV2';\nexport class Loader {\n constructor(server, api, delegate) {\n switch (api) {\n case 'static':\n this.webrender = new WebRenderStatic();\n break;\n case 'v1':\n this.webrender = new WebRenderV1(server);\n this.webrenderV2 = new WebRenderV2(server);\n break;\n case 'v2':\n this.webrender = new WebRenderV2(server);\n this.webrenderV2 = new WebRenderV2(server);\n break;\n default:\n this.webrender = new WebRenderV1(server);\n this.webrenderV2 = new WebRenderV2(server);\n break;\n }\n this.delegate = delegate;\n this.loadingId = 0;\n this.loaded = 0;\n this.total = 0;\n this.databases = [];\n this.onLoadStart = delegate && delegate.onLoadStart ? delegate.onLoadStart : () => { };\n this.onLoadProgress = delegate && delegate.onLoadProgress ? delegate.onLoadProgress : () => { };\n this.onLoadEnd = delegate && delegate.onLoadEnd ? delegate.onLoadEnd : () => { };\n }\n get progress() {\n return this.total ? this.loaded / this.total : 0;\n }\n async loadImageSnapshot(snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 1;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender\n .image(snapshot)\n .then(src => this.loadImage(src, loadingId))\n .then(img => {\n this.onLoadEnd(this.progress);\n return img;\n });\n }\n async loadVideoSnapshot(video, snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 1;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender\n .video(snapshot)\n .then(src => this.loadVideo(video, src, !!snapshot.view.loop, loadingId))\n .then(() => {\n this.onLoadEnd(this.progress);\n return video;\n });\n }\n async loadVRCubeSnapshot(snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender\n .vrCube(snapshot)\n .then(srcs => {\n this.total = srcs.length;\n const promises = srcs.map(src => this.loadImage(src, loadingId));\n return Promise.all(promises);\n })\n .then(imgs => {\n this.onLoadEnd(this.progress);\n return imgs;\n });\n }\n async loadVRObjectSnapshot(snapshot, position) {\n var _a;\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n if (snapshot.view.animation) {\n if (((_a = snapshot.encoder) === null || _a === void 0 ? void 0 : _a.format) === 'mp4') {\n return this.webrender.video(snapshot).then(src => {\n return this.loadVideoFrames(src, snapshot.view.frames, 30, loadingId);\n });\n }\n else {\n return this.webrender.animation(snapshot).then(srcs => {\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\n });\n }\n }\n else {\n return this.webrender.vrObject(snapshot).then(srcs => {\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\n });\n }\n }\n async loadImage(src, loadingId) {\n const image = new Image();\n image.crossOrigin = location.protocol === 'file:' && !Loader.isValidHttpUrl(src) ? null : 'anonymous';\n const promise = new Promise((resolve, reject) => {\n image.addEventListener('load', () => {\n if (loadingId !== this.loadingId)\n return;\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n resolve(image);\n }, { once: true });\n image.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(`${e.type} : ${src}`);\n }, { once: true });\n });\n image.src = src;\n return promise;\n }\n loadImageFrames(srcs, loop, position, loadingId) {\n this.total = srcs.length;\n const promises = new Array(srcs.length);\n const start = position || 0;\n for (let i = 0, n = srcs.length; i < n; i += 1) {\n const step = Math.ceil(i / 2) * (i % 2 === 0 ? 1 : -1);\n const index = loop ? Maths.mod(start + step, n) : i;\n promises[index] = this.loadImage(srcs[index], loadingId);\n }\n Promise.all(promises)\n .then(() => this.onLoadEnd(this.progress))\n .catch(() => { });\n return promises;\n }\n async loadVideo(video, src, loop, loadingId) {\n video.loop = loop;\n const promise = new Promise((resolve, reject) => {\n video.addEventListener('canplaythrough', () => {\n if (loadingId !== this.loadingId)\n return;\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n resolve();\n }, { once: true });\n video.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(`${e.type} : ${src}`);\n }, { once: true });\n });\n video.src = src;\n video.load();\n return promise;\n }\n async loadVideoFrame(video, fps, frames, i, loadingId) {\n let count = 0;\n return new Promise((resolve, reject) => {\n const seeked = () => {\n if (loadingId !== this.loadingId)\n return;\n if (count !== i) {\n count += 1;\n return;\n }\n video.removeEventListener('seeked', seeked);\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const context = canvas.getContext('2d');\n context.drawImage(video, 0, 0);\n const image = new Image();\n image.src = canvas.toDataURL();\n resolve(image);\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n if (i !== frames - 1) {\n video.currentTime += 1 / fps;\n }\n };\n video.addEventListener('seeked', seeked);\n video.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(e);\n }, { once: true });\n });\n }\n loadVideoFrames(src, frames, fps, loadingId) {\n this.total = frames;\n const promises = new Array(frames);\n const video = document.createElement('video');\n for (let i = 0, n = frames; i < n; i += 1) {\n promises[i] = this.loadVideoFrame(video, fps, frames, i, loadingId);\n }\n video.addEventListener('canplaythrough', () => {\n if (loadingId !== this.loadingId)\n return;\n video.currentTime = 1 / fps / 2;\n }, { once: true });\n video.src = src;\n video.load();\n Promise.all(promises)\n .then(() => this.onLoadEnd(this.progress))\n .catch(() => { });\n return promises;\n }\n async loadImageHotspots(snapshot, hotspots) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrenderV2.imageHotspots(await this.convert(snapshot), hotspots);\n }\n async loadVRCubeHotspots(snapshot, hotspots) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrenderV2.vrCubeHotspots(await this.convert(snapshot), hotspots);\n }\n async loadVRObjectHotspots(snapshot, hotspots) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrenderV2.vrObjectHotspots(await this.convert(snapshot), hotspots);\n }\n async loadImagePick(snapshot, position) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Picking only available with api V2'));\n }\n return await this.webrenderV2.imagePick(await this.convert(snapshot), position);\n }\n async loadVRObjectPick(snapshot, position, index, frames) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Picking only available with api V2'));\n }\n return await this.webrenderV2.imagePick(await this.vrObjectFrameSnapshot(snapshot, index, frames), position);\n }\n async loadVRCubePick(snapshot, position, face) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Picking only available with api V2'));\n }\n return await this.webrenderV2.imagePick(await this.vrCubeFrameSnapshot(snapshot, face), position);\n }\n async convert(snapshot) {\n var _a;\n if (!this.webrenderV2) {\n return snapshot;\n }\n if (this.webrender instanceof WebRenderV2) {\n return snapshot;\n }\n if (!snapshot.view.camera) {\n return snapshot;\n }\n const product = snapshot.scene.find(scene => !scene.decor && !scene.accessory);\n if (!product) {\n return snapshot;\n }\n let database = this.databases.find(db => db.id === product.database);\n if (!database || !database.xmlDoc) {\n database = await this.webrender.database(product.database);\n this.databases.push(database);\n }\n const values = (_a = snapshot.view.camera) === null || _a === void 0 ? void 0 : _a.split('/');\n const cameraGroup = values.length === 2 ? values[0] : undefined;\n const cameraName = values.length === 2 ? values[1] : values[0];\n const cameraId = database.getCameraId(cameraName, cameraGroup);\n if (cameraId) {\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: cameraId }) });\n }\n else {\n const cameraGroupId = database.getCameraGroupId(cameraName);\n if (cameraGroupId) {\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { cameraGroup: cameraGroupId }) });\n }\n else {\n return snapshot;\n }\n }\n }\n async vrObjectFrameSnapshot(snapshot, index, frames) {\n if (!this.webrenderV2) {\n return snapshot;\n }\n const product = snapshot.scene.find(scene => !scene.decor && !scene.accessory);\n if (!product) {\n return snapshot;\n }\n let database = this.databases.find(db => db.id === product.database);\n if (!database) {\n database = await this.webrender.database(product.database);\n this.databases.push(database);\n }\n if (this.webrender instanceof WebRenderV1) {\n if (!snapshot.view.camera) {\n return snapshot;\n }\n const cameraGroupId = database.getCameraGroupId(snapshot.view.camera);\n if (!cameraGroupId) {\n return snapshot;\n }\n const cameraGroup = database.getCameraGroupById(cameraGroupId);\n if (!cameraGroup) {\n return snapshot;\n }\n const camera = cameraGroup.cameras[index];\n if (!camera) {\n return snapshot;\n }\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: camera.id }) });\n }\n else if (this.webrender instanceof WebRenderV2) {\n if (snapshot.view.camera) {\n const camera = database.getCameraById(snapshot.view.camera);\n if (!camera) {\n return snapshot;\n }\n const spherical = new Spherical(camera.pointOfView);\n const step = (2 * Math.PI) / frames;\n spherical.longitude += (index * step) % (2 * Math.PI);\n const pov = spherical.pointOfView(camera.pointOfView.target);\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: {\n id: camera.id,\n pov: {\n target: {\n x: pov.target[0],\n y: pov.target[1],\n z: pov.target[2]\n },\n eye: {\n x: pov.eye[0],\n y: pov.eye[1],\n z: pov.eye[2]\n },\n up: {\n x: pov.up[0],\n y: pov.up[1],\n z: pov.up[2]\n }\n }\n } }) });\n }\n else if (snapshot.view.cameraGroup) {\n const cameraGroup = database.getCameraGroupById(snapshot.view.cameraGroup);\n if (!cameraGroup) {\n return snapshot;\n }\n const camera = cameraGroup.cameras[index];\n if (!camera) {\n return snapshot;\n }\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: camera.id }) });\n }\n else {\n return snapshot;\n }\n }\n else {\n return snapshot;\n }\n }\n async vrCubeFrameSnapshot(snapshot, face) {\n const product = snapshot.scene.find(scene => !scene.decor && !scene.accessory);\n if (!product) {\n return snapshot;\n }\n let database = this.databases.find(db => db.id === product.database);\n if (!database) {\n database = await this.webrender.database(product.database);\n this.databases.push(database);\n }\n if (!snapshot.view.camera) {\n return snapshot;\n }\n let cameraId;\n if (this.webrender instanceof WebRenderV1) {\n const values = snapshot.view.camera.split('/');\n const cameraGroup = values.length === 2 ? values[0] : undefined;\n const cameraName = values.length === 2 ? values[1] : values[0];\n cameraId = database.getCameraId(cameraName, cameraGroup);\n }\n else if (this.webrender instanceof WebRenderV2) {\n cameraId = snapshot.view.camera;\n }\n if (!cameraId) {\n return snapshot;\n }\n const camera = database.getCameraById(cameraId);\n if (!camera) {\n return snapshot;\n }\n const pointOfView = PointOfView.initCubeFace(camera.pointOfView.eye, camera.pointOfView.target, face);\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: {\n id: camera.id,\n pov: {\n target: {\n x: pointOfView.target[0],\n y: pointOfView.target[1],\n z: pointOfView.target[2]\n },\n eye: {\n x: pointOfView.eye[0],\n y: pointOfView.eye[1],\n z: pointOfView.eye[2]\n },\n up: {\n x: pointOfView.up[0],\n y: pointOfView.up[1],\n z: pointOfView.up[2]\n }\n },\n lens: {\n fov: 90\n }\n } }), parameters: Object.assign(Object.assign({}, snapshot.parameters), { width: Math.max(snapshot.parameters.width, snapshot.parameters.height), height: Math.max(snapshot.parameters.width, snapshot.parameters.height) }) });\n }\n onLoadStart(progress) {\n if (this.delegate) {\n this.delegate.onLoadStart(progress);\n }\n }\n onLoadProgress(progress) {\n if (this.delegate) {\n this.delegate.onLoadProgress(progress);\n }\n }\n onLoadEnd(progress) {\n if (this.delegate) {\n this.delegate.onLoadEnd(progress);\n }\n }\n static isValidHttpUrl(str) {\n let url;\n try {\n url = new URL(str);\n }\n catch (_) {\n return false;\n }\n return url.protocol === 'http:' || url.protocol === 'https:';\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class Video {\n constructor() {\n this.element = document.createElement('video');\n this.element.classList.add('ls-viewer-video');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.element.setAttribute('muted', '');\n this.element.setAttribute('playsinline', '');\n this.element.setAttribute('preload', 'auto');\n }\n show() {\n this.element.style.opacity = '1';\n }\n hide() {\n this.element.style.opacity = '0';\n }\n resize(width, height, resolution, fit) {\n const viewport = Viewport.fit(resolution, new Resolution(width, height), fit);\n this.element.style.top = `${viewport.top}px`;\n this.element.style.left = `${viewport.left}px`;\n this.element.style.width = `${viewport.width}px`;\n this.element.style.height = `${viewport.height}px`;\n if (resolution.width !== this.element.width || resolution.height !== this.element.height) {\n this.element.width = resolution.width;\n this.element.height = resolution.height;\n }\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class WidgetImage {\n constructor(container, canvas, loader) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.hotspotList = [];\n }\n destroy() { }\n show() {\n this.canvas.show(false);\n this.container.classList.add('ls-viewer-container-image');\n }\n hide() {\n this.canvas.hide(false);\n this.container.classList.remove('ls-viewer-container-image');\n }\n async load(snapshot, hotspots, reset, fade) {\n let promise = Promise.resolve();\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash && this.image) {\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\n }\n else {\n promise = promise.then(() => this.loader.loadImageSnapshot(snapshot).then(image => {\n this.canvas.draw(image, fade, 0.05);\n this.image = image;\n }));\n }\n const hotspotsHash = JSON.stringify(hotspots);\n if (hotspots.length && (snapshotHash !== this.snapshotHash || hotspotsHash !== this.hotspotsHash)) {\n promise = promise.then(() => this.loader.loadImageHotspots(snapshot, hotspots).then(hotspots => {\n this.hotspotList = hotspots;\n }));\n }\n this.hotspotsHash = hotspotsHash;\n this.snapshotHash = snapshotHash;\n return promise;\n }\n async pick(snapshot, position) {\n const resolution = new Resolution(snapshot.parameters.width, snapshot.parameters.height);\n const unprojectedPosition = Viewport.unproject(resolution, this.canvas.resolution, this.canvas.fit, position);\n return this.loader.loadImagePick(snapshot, unprojectedPosition);\n }\n hotspots(resolution) {\n return this.hotspotList\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { position2D: Viewport.project(resolution, this.canvas.resolution, this.canvas.fit, hotspot.position2D) })))\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { visibility: Viewport.contains(this.canvas.resolution, hotspot.position2D) ? hotspot.visibility : 'OutOfFrustum' })));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n onMouseDown(e) { }\n onMouseMove(e) { }\n onMouseUp(e) { }\n onMouseEnter(e) { }\n onTouchStart(e) { }\n onTouchMove(e) { }\n onTouchEnd(e) { }\n onDeviceOrientation(e) { }\n}\n","export class WidgetVideo {\n constructor(container, video, loader) {\n this.container = container;\n this.loader = loader;\n this.video = video;\n }\n destroy() { }\n show() {\n this.video.show();\n this.container.classList.add('ls-viewer-container-video');\n }\n hide() {\n this.video.hide();\n this.container.classList.remove('ls-viewer-container-video');\n }\n async load(snapshot) {\n const hash = JSON.stringify(snapshot);\n if (hash === this.hash) {\n this.video.element.load();\n return Promise.resolve();\n }\n this.hash = hash;\n return this.loader.loadVideoSnapshot(this.video.element, snapshot);\n }\n async pick(snapshot, position) {\n return Promise.reject();\n }\n hotspots(resolution) {\n return [];\n }\n snapshot(type, quality) {\n return 'data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';\n }\n async play() {\n return new Promise((resolve, reject) => {\n this.video.element.addEventListener('ended', () => {\n resolve();\n }, { once: true });\n this.video.element.play().catch(reject);\n this.show();\n });\n }\n onMouseDown(e) { }\n onMouseMove(e) { }\n onMouseUp(e) { }\n onMouseEnter(e) { }\n onTouchStart(e) { }\n onTouchMove(e) { }\n onTouchEnd(e) { }\n onDeviceOrientation(e) { }\n}\n","export class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n clone() {\n return new Point(this.x, this.y);\n }\n}\n","import { Point } from './Point';\nexport class EventHelper {\n static pointFromMouseEvent(e) {\n return new Point(e.screenX, e.screenY);\n }\n static pointFromTouchEvent(e) {\n const touch = e.targetTouches[0] || e.changedTouches[0];\n return new Point(touch.screenX, touch.screenY);\n }\n}\n","import { m4, v3 } from 'twgl.js';\nexport class Basis3 {\n constructor(...args) {\n if (args.length === 3) {\n ({ 0: this.u, 1: this.v, 2: this.o } = args);\n this.w = v3.cross(this.u, this.v);\n }\n else if (args.length === 4) {\n ({ 0: this.u, 1: this.v, 2: this.w, 3: this.o } = args);\n }\n else {\n this.u = [1, 0, 0];\n this.v = [0, 1, 0];\n this.w = [0, 0, 1];\n this.o = [0, 0, 0];\n }\n }\n get localToGlobalMatrix() {\n const X = [this.u[0], this.u[1], this.u[2], 0.0];\n const Y = [this.v[0], this.v[1], this.v[2], 0.0];\n const Z = [this.w[0], this.w[1], this.w[2], 0.0];\n const W = [this.o[0], this.o[1], this.o[2], 1.0];\n return [...X, ...Y, ...Z, ...W];\n }\n get globalToLocalMatrix() {\n return m4.inverse(this.localToGlobalMatrix);\n }\n}\n","export class InertiaPoint {\n constructor(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time;\n }\n}\n","import { InertiaPoint } from './InertiaPoint';\nimport { Point } from './Point';\nexport class Inertia {\n constructor(onMotion) {\n this.points = [];\n this.onMotion = onMotion;\n this.lastPoint = new Point(0.0, 0.0);\n this.velocity = new Point(0.0, 0.0);\n this.loop = this.loop.bind(this);\n }\n destroy() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n track(point) {\n const time = Date.now();\n this.points = this.points.filter(p => time - p.time <= 100);\n this.points.push(new InertiaPoint(point.x, point.y, time));\n this.lastPoint = point;\n }\n start() {\n if (this.points.length === 0) {\n return;\n }\n const firstPoint = this.points[0];\n const lastPoint = this.points[this.points.length - 1];\n const dx = lastPoint.x - firstPoint.x;\n const dy = lastPoint.y - firstPoint.y;\n const dt = lastPoint.time - firstPoint.time;\n this.velocity = new Point(dt === 0 ? 0 : dx / (dt / 15), dt === 0 ? 0 : dy / (dt / 15));\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n this.animationFrameId = requestAnimationFrame(this.loop);\n }\n stop() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n this.points = [];\n }\n loop() {\n if (Math.abs(this.velocity.x) < 1 && Math.abs(this.velocity.y) < 1) {\n this.animationFrameId = undefined;\n this.points = [];\n return;\n }\n this.lastPoint.x += this.velocity.x;\n this.lastPoint.y += this.velocity.y;\n this.velocity.x *= 0.9;\n this.velocity.y *= 0.9;\n this.onMotion(this.lastPoint.clone());\n this.animationFrameId = requestAnimationFrame(this.loop);\n }\n}\n","import { m4, v3 } from 'twgl.js';\nimport { Basis3 } from './Basis3';\nimport { Inertia } from './Inertia';\nimport { Maths } from './Maths';\nimport { Point } from './Point';\nimport { PointOfView } from './PointOfView';\nexport class InteractiveCamera {\n constructor(pov, fov, onMotion) {\n this.isStarted = false;\n this.pov = pov;\n this.fov = Maths.degreesToRadians(fov);\n this.orientationMatrix = m4.identity();\n this.inertia = new Inertia(this.motion.bind(this));\n this.onMotion = onMotion;\n this.initPov = this.pov;\n this.initFov = this.fov;\n this.initOrientation = Maths.degreesToRadians(window.orientation) || 0;\n this.startPov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\n this.startSize = { width: 0.0, height: 0.0 };\n this.previousPoint = new Point(0.0, 0.0);\n }\n destroy() {\n this.inertia.destroy();\n }\n get orientedPov() {\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\n const matrix = m4.identity();\n m4.multiply(matrix, headBasis.localToGlobalMatrix, matrix);\n m4.multiply(matrix, this.orientationMatrix, matrix);\n m4.multiply(matrix, headBasis.globalToLocalMatrix, matrix);\n const target = m4.transformDirection(matrix, this.pov.target);\n const eye = this.pov.eye;\n const up = m4.transformDirection(matrix, this.pov.up);\n return new PointOfView(target, eye, up);\n }\n reset() {\n this.pov = this.initPov.clone();\n this.fov = this.initFov;\n }\n start(point, size) {\n this.isStarted = true;\n this.startPov = this.pov;\n this.startSize = size;\n this.previousPoint = point;\n this.inertia.stop();\n }\n motion(point) {\n if (this.isStarted) {\n this.inertia.track(point);\n }\n const delta = {\n x: point.x - this.previousPoint.x,\n y: point.y - this.previousPoint.y\n };\n const dx = (Maths.accelerate(delta.x, 1.3) / this.startSize.width) * 0.2 * Math.PI * 1.5;\n const dy = (Maths.accelerate(delta.y, 1.3) / this.startSize.height) * 0.2 * Math.PI;\n const rotationMatrix = m4.multiply(m4.rotationY(-dx), m4.rotationX(-dy));\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\n const headMatrix = m4.identity();\n m4.multiply(headMatrix, headBasis.localToGlobalMatrix, headMatrix);\n m4.multiply(headMatrix, rotationMatrix, headMatrix);\n m4.multiply(headMatrix, headBasis.globalToLocalMatrix, headMatrix);\n const target = m4.transformPoint(headMatrix, this.pov.target);\n const up = m4.transformDirection(headMatrix, this.pov.up);\n if (v3.cross(up, [0, 0, 1])[0] >= 0) {\n this.pov.target = target;\n this.pov.up = up;\n }\n this.previousPoint = point;\n this.onMotion();\n }\n end(point, inertia) {\n this.isStarted = false;\n if (inertia) {\n this.inertia.track(point);\n this.inertia.start();\n }\n }\n orientation(alpha, beta, gamma) {\n const orientation = Maths.degreesToRadians(window.orientation) || 0;\n const alphaRadians = Maths.degreesToRadians(alpha);\n const betaRadians = Maths.degreesToRadians(-beta);\n const gammaRadians = Maths.degreesToRadians(-gamma);\n const matrix = m4.rotationX(Maths.degreesToRadians(90));\n m4.rotateZ(matrix, this.initOrientation, matrix);\n m4.rotateZ(matrix, alphaRadians, matrix);\n m4.rotateX(matrix, betaRadians, matrix);\n m4.rotateY(matrix, gammaRadians, matrix);\n m4.rotateZ(matrix, -orientation, matrix);\n this.orientationMatrix = matrix;\n this.onMotion();\n }\n}\n","import * as twgl from 'twgl.js';\nimport { m4, v3 } from 'twgl.js';\nimport { EventHelper } from './EventHelper';\nimport { InteractiveCamera } from './InteractiveCamera';\nimport { Maths } from './Maths';\nimport { PointOfView } from './PointOfView';\nimport { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nimport WidgetVRCubeFragmentShader from './WidgetVRCube.frag';\nimport WidgetVRCubeVertexShader from './WidgetVRCube.vert';\nexport class WidgetVRCube {\n constructor(container, canvas, loader, onInteraction) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.images = [];\n this.hotspotsList = [[]];\n const pov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\n const fov = 60;\n const rotationMatrix = m4.rotationX(Maths.degreesToRadians(15));\n m4.transformDirection(rotationMatrix, pov.target, pov.target);\n m4.transformDirection(rotationMatrix, pov.up, pov.up);\n this.interaction = new InteractiveCamera(pov, fov, () => {\n this.animationFrameId = requestAnimationFrame(this.render);\n this.onInteraction({\n pov: this.interaction.pov.clone(),\n fov: this.interaction.fov\n });\n });\n this.onInteraction = onInteraction;\n this.gl = this.canvas.context;\n this.programInfo = twgl.createProgramInfo(this.gl, [`${WidgetVRCubeVertexShader}\\n`, `${WidgetVRCubeFragmentShader}\\n`]);\n this.quad = twgl.primitives.createXYQuadBufferInfo(this.gl);\n this.uniforms = {\n u_matrix: m4.identity(),\n u_mix: 0.0,\n u_texture_back: twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR,\n width: 1,\n height: 1\n }),\n u_texture: twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR,\n width: 1,\n height: 1\n })\n };\n this.render = this.render.bind(this);\n }\n destroy() {\n this.interaction.destroy();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n show() {\n this.canvas.show();\n this.container.classList.add('ls-viewer-container-vrcube');\n }\n hide() {\n this.canvas.hide();\n this.container.classList.remove('ls-viewer-container-vrcube');\n }\n get pov() {\n return this.interaction.pov;\n }\n set pov(pov) {\n if (this.interaction.pov.eye.every((v, i) => v === pov.eye[i]) && this.interaction.pov.target.every((v, i) => v === pov.target[i]) && this.interaction.pov.up.every((v, i) => v === pov.up[i])) {\n return;\n }\n this.interaction.pov = pov.clone();\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n get fov() {\n return Maths.radiansToDegrees(this.interaction.fov);\n }\n set fov(fov) {\n if (this.interaction.fov === fov) {\n return;\n }\n this.interaction.fov = Maths.degreesToRadians(fov);\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n async load(snapshot, hotspots, reset, fade) {\n let promise = Promise.resolve();\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash) {\n promise = promise.then(() => {\n this.animationFrameId = requestAnimationFrame(this.render);\n return Promise.resolve();\n });\n }\n else {\n this.images = [];\n this.animationFrameId = requestAnimationFrame(this.render);\n promise = promise.then(() => this.loader.loadVRCubeSnapshot(snapshot).then(images => {\n this.images = images;\n twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n min: this.gl.LINEAR_MIPMAP_LINEAR,\n minMag: this.gl.LINEAR,\n cubeFaceOrder: [this.gl.TEXTURE_CUBE_MAP_POSITIVE_Z, this.gl.TEXTURE_CUBE_MAP_POSITIVE_X, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_X, this.gl.TEXTURE_CUBE_MAP_POSITIVE_Y, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y],\n src: images\n }, (err, texture) => {\n if (err) {\n return;\n }\n if (reset) {\n this.interaction.reset();\n }\n this.uniforms.u_mix = fade ? 0.0 : 1.0;\n this.uniforms.u_texture_back = this.uniforms.u_texture;\n this.uniforms.u_texture = texture;\n this.animationFrameId = requestAnimationFrame(this.render);\n });\n }));\n }\n const hotspotsHash = JSON.stringify(hotspots);\n if (hotspots.length && (snapshotHash !== this.snapshotHash || hotspotsHash !== this.hotspotsHash)) {\n promise = promise.then(() => this.loader.loadVRCubeHotspots(snapshot, hotspots).then(hotspots => {\n this.hotspotsList = hotspots;\n }));\n }\n this.hotspotsHash = hotspotsHash;\n this.snapshotHash = snapshotHash;\n return promise;\n }\n async pick(snapshot, position) {\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const point2D = [1 - (2 * position.x) / width, 1 - (2 * position.y) / height];\n const point3D = v3.normalize(m4.transformPoint(this.modelViewProjectionMatrix, [point2D[0], point2D[1], 0]));\n const max = Math.max(...[Math.abs(point3D[0]), Math.abs(point3D[1]), Math.abs(point3D[2])]);\n let target = '';\n if (Math.abs(point3D[0]) === max) {\n target = point3D[0] > 0 ? 'XPOS' : 'XNEG';\n }\n else if (Math.abs(point3D[1]) === max) {\n target = point3D[1] > 0 ? 'YPOS' : 'YNEG';\n }\n else {\n target = point3D[2] > 0 ? 'ZPOS' : 'ZNEG';\n }\n let s = 0;\n let t = 0;\n let face = '';\n switch (target) {\n case 'XPOS':\n s = (-point3D[2] / point3D[0] + 1) / 2;\n t = (-point3D[1] / point3D[0] + 1) / 2;\n face = 'right';\n break;\n case 'XNEG':\n s = (point3D[2] / point3D[0] + 1) / 2;\n t = (-point3D[1] / point3D[0] + 1) / 2;\n face = 'left';\n break;\n case 'YPOS':\n s = (point3D[0] / point3D[1] + 1) / 2;\n t = (point3D[2] / point3D[1] + 1) / 2;\n face = 'up';\n break;\n case 'YNEG':\n s = (point3D[0] / point3D[1] + 1) / 2;\n t = (-point3D[2] / point3D[1] + 1) / 2;\n face = 'down';\n break;\n case 'ZPOS':\n s = (point3D[0] / point3D[2] + 1) / 2;\n t = (-point3D[1] / point3D[2] + 1) / 2;\n face = 'front';\n break;\n case 'ZNEG':\n s = (-point3D[0] / point3D[2] + 1) / 2;\n t = (-point3D[1] / point3D[2] + 1) / 2;\n face = 'back';\n break;\n }\n const pos = {\n x: Math.round(s * Math.max(snapshot.parameters.width, snapshot.parameters.height)),\n y: Math.round(t * Math.max(snapshot.parameters.width, snapshot.parameters.height))\n };\n return this.loader.loadVRCubePick(snapshot, pos, face);\n }\n hotspots() {\n var _a, _b;\n const result = [];\n if (this.hotspotsList.length === 0) {\n return [];\n }\n const hotspotCount = (_b = (_a = this.hotspotsList[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n const modelViewProjectionMatrix = m4.inverse(this.modelViewProjectionMatrix);\n for (let i = 0; i < hotspotCount; i++) {\n const faceIndex = this.hotspotsList.findIndex(hotspots => hotspots[i].visibility !== 'OutOfFrustum');\n if (faceIndex === -1) {\n continue;\n }\n const hotspot = Object.assign({}, this.hotspotsList[faceIndex][i]);\n const s = hotspot.position2D.x / this.images[0].width;\n const t = hotspot.position2D.y / this.images[0].height;\n let rx = 0;\n let ry = 0;\n let rz = 0;\n switch (faceIndex) {\n case 0:\n if (this.pov.target[2] < 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 2 * s - 1;\n ry = 1 - 2 * t;\n rz = 1;\n break;\n case 1:\n if (this.pov.target[0] < 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 1;\n ry = 1 - 2 * t;\n rz = 1 - 2 * s;\n break;\n case 2:\n if (this.pov.target[2] > 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 1 - 2 * s;\n ry = 1 - 2 * t;\n rz = 1;\n break;\n case 3:\n if (this.pov.target[0] > 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 1;\n ry = 1 - 2 * t;\n rz = 2 * s - 1;\n break;\n case 4:\n if (this.pov.target[1] < 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 2 * s - 1;\n ry = 1;\n rz = 2 * t - 1;\n break;\n case 5:\n if (this.pov.target[1] > 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 2 * s - 1;\n ry = 1;\n rz = 1 - 2 * t;\n break;\n }\n const point3D = v3.normalize([rx, ry, rz]);\n const point2D = m4.transformPoint(modelViewProjectionMatrix, point3D);\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const position2D = {\n x: width - 0.5 * width * (point2D[0] + 1),\n y: height - 0.5 * height * (point2D[1] + 1)\n };\n const canvasResolution = new Resolution(width, height);\n const visibility = Viewport.contains(canvasResolution, position2D) ? hotspot.visibility : 'OutOfFrustum';\n result.push(Object.assign(Object.assign({}, hotspot), { position2D, visibility }));\n }\n return result;\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n get modelViewProjectionMatrix() {\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const aspect = width > height ? width / height : height / width;\n const standardAspectRatio = Viewport.getStandardAspectRatio(width, height);\n const fov = this.interaction.fov * (standardAspectRatio / aspect);\n const projectionMatrix = width > height ? Maths.perspectiveWithFovY(fov, width / height, 0.5, 100) : Maths.perspectiveWithFovX(fov, width / height, 0.5, 100);\n const projectionMatrixInverse = m4.inverse(projectionMatrix);\n const pov = this.interaction.orientedPov;\n const viewMatrixInverse = m4.lookAt(pov.eye, pov.target, pov.up);\n return m4.multiply(viewMatrixInverse, projectionMatrixInverse);\n }\n render() {\n this.gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n this.uniforms.u_matrix = this.modelViewProjectionMatrix;\n this.gl.useProgram(this.programInfo.program);\n twgl.setBuffersAndAttributes(this.gl, this.programInfo, this.quad);\n twgl.setUniforms(this.programInfo, this.uniforms);\n twgl.drawBufferInfo(this.gl, this.quad);\n if (this.uniforms.u_mix < 1.0) {\n this.uniforms.u_mix = Math.min(this.uniforms.u_mix + 0.05, 1.0);\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n }\n onMouseDown(e) {\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\n width: this.gl.canvas.width,\n height: this.gl.canvas.height\n });\n }\n onMouseMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\n e.preventDefault();\n }\n onMouseUp(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\n }\n onMouseEnter(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n if (e.buttons === 0) {\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\n }\n }\n onTouchStart(e) {\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\n width: this.gl.canvas.width,\n height: this.gl.canvas.height\n });\n }\n onTouchMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\n e.preventDefault();\n }\n onTouchEnd(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\n }\n onDeviceOrientation(e) {\n this.interaction.orientation(e.alpha, e.beta, e.gamma);\n }\n}\n","import regression from 'regression';\nimport { Inertia } from './Inertia';\nimport { Maths } from './Maths';\nimport { Point } from './Point';\nexport class InteractivePosition {\n constructor(position, frames, rows, loop, onMotion) {\n this.isStarted = false;\n this.position = position;\n this.frames = frames;\n this.rows = rows;\n this.loop = loop;\n this.onMotion = onMotion;\n this.inertia = new Inertia(this.motion.bind(this));\n this.initPosition = this.position;\n this.startPosition = { x: 0.0, y: 0.0 };\n this.startPoint = new Point(0.0, 0.0);\n this.startSize = { width: 0.0, height: 0.0 };\n this.lastPoints = [];\n this.lastPointsNumber = 20;\n }\n destroy() {\n this.inertia.destroy();\n }\n reset() {\n this.position = this.initPosition;\n }\n get positionIndex() {\n return this.frames * this.position.y + this.position.x;\n }\n set positionIndex(index) {\n if (this.positionIndex === index) {\n return;\n }\n const positionIndex = this.loop ? Maths.mod(index, this.frames * this.rows) : Math.max(0, Math.min(index, this.frames * this.rows));\n this.position.x = Maths.mod(positionIndex, this.frames);\n this.position.y = Math.floor(positionIndex / this.frames);\n }\n start(point, size) {\n this.isStarted = true;\n this.startPosition = Object.assign({}, this.position);\n this.startPoint = point;\n this.startSize = size;\n this.lastPoints = [];\n this.inertia.stop();\n }\n motion(point) {\n if (this.isStarted) {\n this.inertia.track(point);\n }\n this.lastPoints.push({ x: point.x, y: point.y });\n this.lastPoints.splice(0, this.lastPoints.length - this.lastPointsNumber);\n const regressionResult = regression.linear(this.lastPoints.map(p => [p.x, p.y]));\n const minDistance = 25;\n if (Math.abs(regressionResult.equation[0]) < 1) {\n const dx = (Maths.accelerate(point.x - this.startPoint.x, 1.3) / this.startSize.width) * (this.frames / 4);\n let positionX = this.startPosition.x - Math.round(dx);\n positionX = this.loop ? Maths.mod(positionX, this.frames) : Math.max(0, Math.min(positionX, this.frames - 1));\n if (positionX !== this.position.x) {\n this.position.x = positionX;\n this.onMotion();\n }\n const minX = Math.min(...this.lastPoints.map(p => p.x));\n const maxX = Math.max(...this.lastPoints.map(p => p.x));\n if (maxX - minX > minDistance) {\n this.startPoint.y = point.y;\n this.startPosition.y = this.position.y;\n }\n }\n else {\n const dy = (Maths.accelerate(point.y - this.startPoint.y, 1.7) / this.startSize.height) * (this.rows / 4);\n let positionY = this.startPosition.y + Math.round(dy);\n positionY = Math.max(0, Math.min(positionY, this.rows - 1));\n if (positionY !== this.position.y) {\n this.position.y = positionY;\n this.onMotion();\n }\n const minY = Math.min(...this.lastPoints.map(p => p.y));\n const maxY = Math.max(...this.lastPoints.map(p => p.y));\n if (maxY - minY > minDistance) {\n this.startPoint.x = point.x;\n this.startPosition.x = this.position.x;\n }\n }\n }\n end(point, inertia) {\n this.isStarted = false;\n if (inertia) {\n this.inertia.track(point);\n this.inertia.start();\n }\n }\n}\n","import { EventHelper } from './EventHelper';\nimport { InteractivePosition } from './InteractivePosition';\nimport { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class WidgetVRObject {\n constructor(container, canvas, loader, onInteraction) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.images = [];\n this.frames = 24;\n this.hotspotsList = [[]];\n this.interaction = new InteractivePosition({ x: 0, y: 0 }, 1, 1, false, () => {\n this.canvas.draw(this.image, true, 0.5);\n this.onInteraction({\n position: this.interaction.positionIndex\n });\n });\n this.onInteraction = onInteraction;\n }\n destroy() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n show() {\n this.canvas.show(false);\n this.container.classList.add('ls-viewer-container-vrobject');\n }\n hide() {\n this.canvas.hide(false);\n this.container.classList.remove('ls-viewer-container-vrobject');\n }\n async goto(position) {\n return new Promise(resolve => {\n let pos = this.interaction.positionIndex;\n const goToLoop = () => {\n if (this.interaction.positionIndex === position) {\n resolve();\n }\n else {\n let sign = pos > position ? -1 : 1;\n if (this.interaction.loop) {\n if (this.interaction.frames - pos + position < Math.abs(position - pos)) {\n sign *= -1;\n }\n }\n pos += 0.5 * sign;\n this.position = Math.floor(pos);\n this.animationFrameId = requestAnimationFrame(goToLoop);\n }\n };\n this.animationFrameId = requestAnimationFrame(goToLoop);\n });\n }\n get position() {\n return this.interaction.positionIndex;\n }\n set position(position) {\n this.interaction.positionIndex = position;\n this.canvas.draw(this.image, true, 0.5);\n }\n get image() {\n return this.images[this.interaction.positionIndex];\n }\n async load(snapshot, hotspots, reset, fade) {\n let promise = Promise.resolve();\n if (reset) {\n this.interaction.reset();\n }\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash && this.image) {\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\n }\n else {\n this.images = [];\n promise = promise.then(() => this.loader.loadVRObjectSnapshot(snapshot, this.interaction.positionIndex).then(promises => {\n const frames = promises.length;\n this.images = new Array(frames);\n this.interaction.frames = snapshot.view.frames || this.frames;\n this.interaction.rows = frames / this.interaction.frames;\n this.interaction.loop = !!snapshot.view.loop;\n if (reset) {\n this.interaction.reset();\n }\n promises.forEach((promise, i) => {\n promise\n .then(img => {\n this.images[i] = img;\n if (img === this.image) {\n this.canvas.draw(this.image, fade, 0.05);\n }\n })\n .catch(() => { });\n });\n return promises[this.interaction.positionIndex].then(() => Promise.resolve());\n }));\n }\n const hotspotsHash = JSON.stringify(hotspots);\n if (hotspots.length && (snapshotHash !== this.snapshotHash || hotspotsHash !== this.hotspotsHash)) {\n promise = promise.then(() => this.loader.loadVRObjectHotspots(snapshot, hotspots).then(hotspots => {\n this.hotspotsList = hotspots;\n }));\n }\n this.hotspotsHash = hotspotsHash;\n this.snapshotHash = snapshotHash;\n return promise;\n }\n async pick(snapshot, position) {\n const resolution = new Resolution(snapshot.parameters.width, snapshot.parameters.height);\n const unprojectedPosition = Viewport.unproject(resolution, this.canvas.resolution, this.canvas.fit, position);\n return this.loader.loadVRObjectPick(snapshot, unprojectedPosition, this.position, this.frames);\n }\n hotspots(resolution) {\n const hotspots = this.hotspotsList[this.interaction.positionIndex] || [];\n return hotspots\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { position2D: Viewport.project(resolution, this.canvas.resolution, this.canvas.fit, hotspot.position2D) })))\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { visibility: Viewport.contains(this.canvas.resolution, hotspot.position2D) ? hotspot.visibility : 'OutOfFrustum' })));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n onMouseDown(e) {\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\n width: this.canvas.element.width,\n height: this.canvas.element.height\n });\n }\n onMouseMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\n e.preventDefault();\n }\n onMouseUp(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\n }\n onMouseEnter(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n if (e.buttons === 0) {\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\n }\n }\n onTouchStart(e) {\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\n width: this.canvas.element.width,\n height: this.canvas.element.height\n });\n }\n onTouchMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\n e.preventDefault();\n }\n onTouchEnd(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\n }\n onDeviceOrientation(e) { }\n}\n","export var WRAPIv2;\n(function (WRAPIv2) {\n let SunShadowQualityMode;\n (function (SunShadowQualityMode) {\n SunShadowQualityMode[\"VeryLow\"] = \"veryLow\";\n SunShadowQualityMode[\"Low\"] = \"low\";\n SunShadowQualityMode[\"Medium\"] = \"medium\";\n SunShadowQualityMode[\"Fine\"] = \"fine\";\n SunShadowQualityMode[\"Ultra\"] = \"ultra\";\n })(SunShadowQualityMode = WRAPIv2.SunShadowQualityMode || (WRAPIv2.SunShadowQualityMode = {}));\n let SunShadowSmoothnessMode;\n (function (SunShadowSmoothnessMode) {\n SunShadowSmoothnessMode[\"None\"] = \"none\";\n SunShadowSmoothnessMode[\"Weak\"] = \"weak\";\n SunShadowSmoothnessMode[\"Normal\"] = \"normal\";\n SunShadowSmoothnessMode[\"Fine\"] = \"fine\";\n SunShadowSmoothnessMode[\"UltraFine\"] = \"ultraFine\";\n SunShadowSmoothnessMode[\"Max\"] = \"max\";\n })(SunShadowSmoothnessMode = WRAPIv2.SunShadowSmoothnessMode || (WRAPIv2.SunShadowSmoothnessMode = {}));\n let SunUseCaseMode;\n (function (SunUseCaseMode) {\n SunUseCaseMode[\"Manual\"] = \"manual\";\n SunUseCaseMode[\"ExtractedFromEnv\"] = \"extractedFromEnv\";\n })(SunUseCaseMode = WRAPIv2.SunUseCaseMode || (WRAPIv2.SunUseCaseMode = {}));\n})(WRAPIv2 || (WRAPIv2 = {}));\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import debounce from 'debounce-promise';\nimport { Canvas2D } from './Canvas2D';\nimport { Canvas3D } from './Canvas3D';\nimport { Loader } from './Loader';\nimport { Resolution } from './Resolution';\nimport { Video } from './Video';\nimport { Viewport } from './Viewport';\nimport { WidgetImage } from './WidgetImage';\nimport { WidgetVideo } from './WidgetVideo';\nimport { WidgetVRCube } from './WidgetVRCube';\nimport { WidgetVRObject } from './WidgetVRObject';\nimport './index.css';\nexport class Viewer {\n constructor(container, options) {\n this.checkResize = this.checkResize.bind(this);\n this.onDeviceOrientation = this.onDeviceOrientation.bind(this);\n this.onResize = this.onResize.bind(this);\n this.onMouseDown = this.onMouseDown.bind(this);\n this.onMouseMove = this.onMouseMove.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onTouchStart = this.onTouchStart.bind(this);\n this.onTouchMove = this.onTouchMove.bind(this);\n this.onTouchEnd = this.onTouchEnd.bind(this);\n this.onLoadStart = this.onLoadStart.bind(this);\n this.onLoadProgress = this.onLoadProgress.bind(this);\n this.onLoadEnd = this.onLoadEnd.bind(this);\n this.onLoadError = this.onLoadError.bind(this);\n this.onHotspotsChange = this.onHotspotsChange.bind(this);\n this.onVrcubeInteraction = this.onVrcubeInteraction.bind(this);\n this.onVrobjectInteraction = this.onVrobjectInteraction.bind(this);\n this.options = Object.assign({ server: 'localhost', api: 'v1', fit: 'cover', image: {}, video: {}, vrcube: {}, vrobject: {}, events: {} }, options);\n this.options.events = Object.assign({ onLoadStart: () => { }, onLoadProgress: () => { }, onLoadEnd: () => { }, onLoadError: () => { }, onInteraction: () => { }, onVrcubeInteraction: () => { }, onVrobjectInteraction: () => { }, onHotspotsChange: () => { } }, options.events);\n this.options.events.onLoadError = debounce(this.options.events.onLoadError, 10);\n this.container = container;\n this.container.classList.add('ls-viewer-container');\n this.containerWidth = 0;\n this.containerHeight = 0;\n this.canvas2D = new Canvas2D(this.options.fit);\n this.container.appendChild(this.canvas2D.element);\n this.canvas3D = new Canvas3D();\n this.container.appendChild(this.canvas3D.element);\n this.video = new Video();\n this.container.appendChild(this.video.element);\n this.loader = new Loader(this.options.server, this.options.api, this);\n this.resolution = new Resolution(0, 0);\n this.parameters = {\n width: 0,\n height: 0,\n antialiasing: false,\n superSampling: 2\n };\n this.encoder = {\n format: 'jpeg',\n quality: 80\n };\n this.hotspots = [];\n this.widgetImage = new WidgetImage(container, this.canvas2D, this.loader);\n this.widgetVideo = new WidgetVideo(container, this.video, this.loader);\n this.widgetVRObject = new WidgetVRObject(container, this.canvas2D, this.loader, this.onVrobjectInteraction);\n if (this.canvas3D.context) {\n this.widgetVRCube = new WidgetVRCube(container, this.canvas3D, this.loader, this.onVrcubeInteraction);\n }\n this.widget = this.widgetImage;\n this.isDestroyed = false;\n this.container.addEventListener('mousedown', this.onMouseDown);\n this.container.addEventListener('mouseenter', this.onMouseEnter);\n this.container.addEventListener('touchstart', this.onTouchStart);\n document.addEventListener('mousemove', this.onMouseMove, { passive: false });\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('touchmove', this.onTouchMove, { passive: false });\n document.addEventListener('touchend', this.onTouchEnd);\n this.loadWidget = debounce(this.loadWidget, 10);\n this.onResize = debounce(this.onResize, 250);\n requestAnimationFrame(this.checkResize);\n }\n destroy() {\n this.canvas2D.destroy();\n this.container.removeEventListener('mousedown', this.onMouseDown);\n this.container.removeEventListener('mouseenter', this.onMouseEnter);\n this.container.removeEventListener('touchstart', this.onTouchStart);\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('touchmove', this.onTouchMove);\n document.removeEventListener('touchend', this.onTouchEnd);\n this.isDestroyed = true;\n }\n async load(scene, transition) {\n let promise = Promise.resolve();\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.loadAnimation(transition.animation));\n }\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\n const mode = this.view.mode;\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\n }\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.widgetVideo.play());\n }\n promise = promise.then(() => {\n this.scene = Array.isArray(scene) ? [...scene] : [scene];\n return this.loadWidget(false, !(transition && transition.animation));\n });\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n async setEncoder(encoder) {\n this.encoder = Object.assign({}, encoder);\n let promise = Promise.resolve();\n promise = promise.then(() => this.loadWidget(false, true));\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n setParameters(parameters) {\n this.parameters = Object.assign({}, parameters);\n this.parameters.width = this.resolution.width;\n this.parameters.height = this.resolution.height;\n let promise = Promise.resolve();\n promise = promise.then(() => this.loadWidget(false, true));\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n setHotspots(hotspots) {\n this.hotspots = hotspots;\n this.loadWidget(false, false);\n }\n async setView(view, transition) {\n let promise = Promise.resolve();\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.loadAnimation(transition.animation));\n }\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\n }\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.widgetVideo.play());\n }\n promise = promise.then(() => {\n let reset = true;\n this.view = Object.assign({}, view);\n if (this.view && this.viewWidget instanceof WidgetVRObject && (transition === null || transition === void 0 ? void 0 : transition.toPosition) !== undefined) {\n reset = false;\n this.viewWidget.position = transition.toPosition;\n }\n return this.loadWidget(reset, !(transition && transition.animation));\n });\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n setVrcube(data) {\n if (!this.widgetVRCube) {\n return;\n }\n Object.assign(this.widgetVRCube, data);\n }\n setVrobject(data) {\n Object.assign(this.widgetVRObject, data);\n }\n async loadAnimation(animation) {\n var _a;\n const snapshot = {\n scene: this.scene,\n view: {\n animation: animation.name,\n camera: animation.camera,\n duration: animation.duration,\n loop: animation.loop,\n reverse: animation.reverse\n },\n parameters: this.parameters,\n encoder: {\n format: 'mp4'\n }\n };\n if (!((_a = snapshot.view) === null || _a === void 0 ? void 0 : _a.background)) {\n snapshot.view.background = 'product';\n }\n return this.widgetVideo.load(snapshot).then(() => Promise.resolve());\n }\n async playAnimation(animation) {\n return this.loadAnimation(animation)\n .then(() => this.widgetVideo.play())\n .catch(e => {\n this.onLoadError(e);\n });\n }\n stopAnimation() {\n this.widgetVideo.hide();\n }\n async pick(position) {\n if (!this.scene) {\n throw new Error('No scene set');\n }\n if (!this.view) {\n throw new Error('No view set');\n }\n if (!this.view.camera && !this.view.cameraGroup) {\n throw new Error('No camera set');\n }\n const snapshot = {\n scene: this.scene,\n view: this.view,\n parameters: this.parameters,\n encoder: this.encoder\n };\n return await this.viewWidget.pick(snapshot, position);\n }\n snapshot(type, quality) {\n return this.viewWidget.snapshot(type, quality);\n }\n async loadWidget(reset, fade) {\n if (!this.scene || !this.view) {\n return Promise.resolve();\n }\n if (!this.parameters.width || !this.parameters.height) {\n return Promise.resolve();\n }\n const widget = this.viewWidget;\n if (!widget) {\n return Promise.reject(new Error('Unknown view mode'));\n }\n const snapshot = {\n scene: this.scene,\n view: this.view,\n parameters: this.parameters,\n encoder: this.encoder\n };\n if (!snapshot.view.background) {\n snapshot.view.background = 'product';\n }\n return widget.load(snapshot, this.hotspots, reset, fade).then(() => {\n this.widget.hide();\n this.widget = widget;\n this.widget.show();\n this.widgetVideo.hide();\n this.onHotspotsChange();\n });\n }\n get viewWidget() {\n var _a, _b;\n switch ((_a = this.view) === null || _a === void 0 ? void 0 : _a.mode) {\n case 'image':\n return this.widgetImage;\n case 'video':\n return this.widgetVideo;\n case 'vrcube':\n return (_b = this.widgetVRCube) !== null && _b !== void 0 ? _b : this.widgetImage;\n case 'vrobject':\n return this.widgetVRObject;\n default:\n return this.widgetImage;\n }\n }\n checkResize() {\n if (this.isDestroyed) {\n return;\n }\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n if (width !== this.containerWidth || height !== this.containerHeight) {\n this.containerWidth = width;\n this.containerHeight = height;\n this.onResize();\n }\n if (!this.isDestroyed) {\n requestAnimationFrame(this.checkResize);\n }\n }\n onMouseDown(e) {\n this.widget.onMouseDown(e);\n }\n onMouseEnter(e) {\n this.widget.onMouseEnter(e);\n }\n onMouseMove(e) {\n this.widget.onMouseMove(e);\n }\n onMouseUp(e) {\n this.widget.onMouseUp(e);\n }\n onTouchStart(e) {\n this.widget.onTouchStart(e);\n }\n onTouchMove(e) {\n this.widget.onTouchMove(e);\n }\n onTouchEnd(e) {\n this.widget.onTouchEnd(e);\n }\n onDeviceOrientation(e) {\n this.widget.onDeviceOrientation(e);\n }\n onResize() {\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n this.resolution = Viewport.getStandardResolution(width * window.devicePixelRatio, height * window.devicePixelRatio);\n this.parameters.width = this.resolution.width;\n this.parameters.height = this.resolution.height;\n this.canvas2D.resize(width, height, window.devicePixelRatio);\n this.canvas3D.resize(width, height, window.devicePixelRatio);\n this.video.resize(width, height, this.resolution, this.options.fit);\n this.loadWidget(false, false)\n .then(() => {\n this.onHotspotsChange();\n })\n .catch(e => {\n this.onLoadError(e);\n });\n }\n onVrcubeInteraction(...args) {\n this.onHotspotsChange();\n this.options.events.onInteraction(...args);\n this.options.events.onVrcubeInteraction(...args);\n }\n onVrobjectInteraction(args) {\n this.onHotspotsChange();\n this.options.events.onInteraction(args.position);\n this.options.events.onVrobjectInteraction(args.position);\n }\n onHotspotsChange() {\n const hotspots = this.widget.hotspots(this.resolution);\n if (hotspots.length)\n this.options.events.onHotspotsChange(hotspots);\n }\n onLoadStart(...args) {\n this.container.classList.add('ls-viewer-container-loading');\n this.options.events.onLoadStart(...args);\n }\n onLoadProgress(...args) {\n this.options.events.onLoadProgress(...args);\n }\n onLoadEnd(...args) {\n this.container.classList.remove('ls-viewer-container-loading');\n this.options.events.onLoadEnd(...args);\n }\n onLoadError(...args) {\n this.container.classList.remove('ls-viewer-container-loading');\n this.options.events.onLoadError(...args);\n }\n}\n"],"names":["Resolution","constructor","width","height","this","aspect","Viewport","top","left","contains","resolution","position","x","y","fit","viewportResolution","aspectRatio","viewportRatio","project","viewport","scaleX","scaleY","Math","round","unproject","getStandardAspectRatio","abs","getStandardResolution","quality","getStandardQuality","max","Canvas2D","element","document","createElement","classList","add","style","opacity","context","getContext","backCanvas","backContext","pixelRatio","destroy","requestAnimationId","cancelAnimationFrame","undefined","show","useDisplay","display","hide","resize","draw","img","fade","speed","drawImage","globalAlpha","fadeLoop","image","alpha","min","clearRect","requestAnimationFrame","Canvas3D","twgl","preserveDrawingBuffer","setDefaultTextureColor","Maths","accelerate","v","f","factor","clamp","degreesToRadians","a","PI","radiansToDegrees","mod","floor","perspectiveWithFovX","fovX","near","far","dst","right","tan","perspectiveWithLeft","perspectiveWithFovY","fovY","bottom","ral","rsl","tab","tsb","fsn","Float32Array","PointOfView","initCubeFace","eye","target","face","up","v3","subtract","c","mulScalar","length","b","normalize","cross","copy","viewVector","rightVector","viewMatrix","m4","inverse","lookAt","clone","default","Spherical","pov","view","dot","z","longitude","atan2","latitude","sqrt","distance","vector","x1","cos","y1","sin","pointOfView","alphaMatrix","rotationY","betaMatrix","rotationX","rollMatrix","rotationZ","m","multiply","transformPoint","WebRenderStatic","animation","snapshot","scene","database","databaseId","Error","video","vrCube","vrObject","Database","xmlDoc","id","_a","getElementsByTagName","getAttribute","getCameraId","cameraName","cameraGroup","_b","querySelector","getCameraById","cameraId","groupId","mapElementToCamera","getCameraByName","groupName","getCameraGroupId","getCameraGroupById","mapElementToCameraGroup","getCameraGroupByName","name","parseFloat","cameras","querySelectorAll","map","el","WebRenderV1","server","buildQuery","request","Object","entries","filter","k","join","sceneParameters","accessory","find","p","decor","product","configuration","animations","accessoryDatabaseId","decorDatabaseId","decorDeltaAltitude","translation","renderParameters","parameters","background","softwareAntialiasing","antialiasing","superSampling","encoderParameters","encoder","imageFormat","format","imageQuality","fetch","url","then","response","text","responseText","matches","replace","match","xmlRegex","Promise","reject","assign","bookmarkSet","camera","split","bookmark","frames","loop","queryString","DOMParser","parseFromString","resolve","duration","reverse","SuppressedError","WebRenderV2","pResult","s","e","t","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","propertyIsEnumerable","__rest","toString","jpeg","png","compression","webp","fetchFrame","body","method","JSON","stringify","json","data","fetchFrameArray","fetchHotspots","fetchHotspotsArray","fetchPick","mode","images","panFrames","panFrom","panTo","panLoop","tiltFrames","tiltFrom","tiltTo","tiltLoop","fps","imageHotspots","hotspots","hotspotsBody","imagePick","positions","vrCubeHotspots","vrObjectHotspots","every","hotspot","tags","Loader","api","delegate","webrender","webrenderV2","loadingId","loaded","total","databases","onLoadStart","onLoadProgress","onLoadEnd","progress","loadImageSnapshot","src","loadImage","loadVideoSnapshot","loadVideo","loadVRCubeSnapshot","srcs","promises","all","imgs","loadVRObjectSnapshot","loadVideoFrames","loadImageFrames","Image","crossOrigin","location","protocol","isValidHttpUrl","promise","addEventListener","once","type","Array","start","n","step","ceil","index","catch","load","loadVideoFrame","count","seeked","removeEventListener","canvas","videoWidth","videoHeight","toDataURL","currentTime","loadImageHotspots","convert","loadVRCubeHotspots","loadVRObjectHotspots","loadImagePick","loadVRObjectPick","vrObjectFrameSnapshot","loadVRCubePick","vrCubeFrameSnapshot","db","push","values","cameraGroupId","spherical","lens","fov","str","URL","_","Video","setAttribute","WidgetImage","container","loader","hotspotList","remove","reset","snapshotHash","hotspotsHash","pick","unprojectedPosition","position2D","visibility","onMouseDown","onMouseMove","onMouseUp","onMouseEnter","onTouchStart","onTouchMove","onTouchEnd","onDeviceOrientation","WidgetVideo","hash","play","Point","EventHelper","pointFromMouseEvent","screenX","screenY","pointFromTouchEvent","touch","targetTouches","changedTouches","Basis3","args","u","o","w","localToGlobalMatrix","globalToLocalMatrix","InertiaPoint","time","Inertia","onMotion","points","lastPoint","velocity","bind","animationFrameId","track","point","Date","now","firstPoint","dx","dy","dt","stop","InteractiveCamera","isStarted","orientationMatrix","identity","inertia","motion","initPov","initFov","initOrientation","window","orientation","startPov","startSize","previousPoint","orientedPov","headBasis","matrix","transformDirection","size","delta","rotationMatrix","headMatrix","end","beta","gamma","alphaRadians","betaRadians","gammaRadians","rotateZ","rotateX","rotateY","WidgetVRCube","onInteraction","hotspotsList","interaction","render","gl","programInfo","createProgramInfo","quad","primitives","createXYQuadBufferInfo","uniforms","u_matrix","u_mix","u_texture_back","createTexture","TEXTURE_CUBE_MAP","minMag","LINEAR","u_texture","LINEAR_MIPMAP_LINEAR","cubeFaceOrder","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","err","texture","clientWidth","clientHeight","point2D","point3D","modelViewProjectionMatrix","pos","result","hotspotCount","faceIndex","findIndex","rx","ry","rz","canvasResolution","standardAspectRatio","projectionMatrix","projectionMatrixInverse","viewMatrixInverse","useProgram","program","setBuffersAndAttributes","setUniforms","drawBufferInfo","preventDefault","buttons","InteractivePosition","rows","initPosition","startPosition","startPoint","lastPoints","lastPointsNumber","positionIndex","splice","regressionResult","regression","linear","equation","positionX","minX","positionY","minY","WidgetVRObject","goto","goToLoop","sign","forEach","WRAPIv2","SunShadowQualityMode","SunShadowSmoothnessMode","SunUseCaseMode","css","ref","insertAt","head","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","options","checkResize","onResize","onLoadError","onHotspotsChange","onVrcubeInteraction","onVrobjectInteraction","vrcube","vrobject","events","debounce","containerWidth","containerHeight","canvas2D","canvas3D","widgetImage","widgetVideo","widgetVRObject","widgetVRCube","widget","isDestroyed","passive","loadWidget","transition","loadAnimation","fromPosition","viewWidget","isArray","setEncoder","setParameters","setHotspots","setView","toPosition","setVrcube","setVrobject","playAnimation","stopAnimation","devicePixelRatio"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Resolution.ts","../src/Viewport.ts","../src/Canvas2D.ts","../src/Canvas3D.ts","../src/Maths.ts","../src/PointOfView.ts","../src/Spherical.ts","../src/WebRenderStatic.ts","../src/Database.ts","../src/WebRenderV1.ts","../node_modules/tslib/tslib.es6.js","../src/WebRenderV2.ts","../src/Loader.ts","../src/Video.ts","../src/WidgetImage.ts","../src/WidgetVideo.ts","../src/Point.ts","../src/EventHelper.ts","../src/Basis3.ts","../src/InertiaPoint.ts","../src/Inertia.ts","../src/InteractiveCamera.ts","../src/WidgetVRCube.ts","../src/InteractivePosition.ts","../src/WidgetVRObject.ts","../src/WRAPIv2.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/Viewer.ts"],"sourcesContent":["export class Resolution {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n get aspect() {\n return this.width / this.height;\n }\n}\n","import { Resolution } from './Resolution';\nexport class Viewport {\n constructor(top, left, width, height) {\n this.top = top;\n this.left = left;\n this.width = width;\n this.height = height;\n }\n static contains(resolution, position) {\n return position.x >= 0 && position.x < resolution.width && position.y >= 0 && position.y < resolution.height;\n }\n static fit(resolution, viewportResolution, fit) {\n const aspectRatio = resolution.aspect;\n const viewportRatio = viewportResolution.aspect;\n let width = 0;\n let height = 0;\n switch (fit) {\n case 'contain':\n width = viewportRatio < aspectRatio ? viewportResolution.width : viewportResolution.height * aspectRatio;\n height = viewportRatio < aspectRatio ? viewportResolution.width / aspectRatio : viewportResolution.height;\n break;\n case 'cover':\n default:\n width = viewportRatio < aspectRatio ? viewportResolution.height * aspectRatio : viewportResolution.width;\n height = viewportRatio < aspectRatio ? viewportResolution.height : viewportResolution.width / aspectRatio;\n break;\n case 'fill':\n width = viewportResolution.width;\n height = viewportResolution.height;\n break;\n }\n const top = (viewportResolution.height - height) / 2;\n const left = (viewportResolution.width - width) / 2;\n return new Viewport(top, left, width, height);\n }\n static project(resolution, viewportResolution, fit, position) {\n const viewport = Viewport.fit(resolution, viewportResolution, fit);\n const scaleX = viewport.width / resolution.width;\n const scaleY = viewport.height / resolution.height;\n return {\n x: Math.round(viewport.left + position.x * scaleX),\n y: Math.round(viewport.top + position.y * scaleY)\n };\n }\n static unproject(resolution, viewportResolution, fit, position) {\n const viewport = Viewport.fit(resolution, viewportResolution, fit);\n const scaleX = viewport.width / resolution.width;\n const scaleY = viewport.height / resolution.height;\n return {\n x: Math.round((position.x - viewport.left) / scaleX),\n y: Math.round((position.y - viewport.top) / scaleY)\n };\n }\n static getStandardAspectRatio(width, height) {\n if (width === 0 || height === 0) {\n return 0;\n }\n const aspectRatio = width / height;\n if (width < height) {\n const distanceTo34 = Math.abs(3 / 4 - aspectRatio);\n const distanceTo916 = Math.abs(9 / 16 - aspectRatio);\n return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;\n }\n const distanceTo43 = Math.abs(4 / 3 - aspectRatio);\n const distanceTo169 = Math.abs(16 / 9 - aspectRatio);\n return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;\n }\n static getStandardResolution(width, height) {\n if (width === 0 || height === 0) {\n return new Resolution(0, 0);\n }\n const aspectRatio = Viewport.getStandardAspectRatio(width, height);\n if (width < height) {\n const quality = Viewport.getStandardQuality(Math.max(height * aspectRatio, width));\n return new Resolution(Math.round(quality), Math.round(quality / aspectRatio));\n }\n const quality = Viewport.getStandardQuality(Math.max(width / aspectRatio, height));\n return new Resolution(Math.round(quality * aspectRatio), Math.round(quality));\n }\n static getStandardQuality(height) {\n if (height <= 240) {\n return 240;\n }\n if (height <= 360) {\n return 360;\n }\n if (height <= 480) {\n return 480;\n }\n if (height <= 720) {\n return 720;\n }\n return 1080;\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class Canvas2D {\n constructor(fit) {\n this.element = document.createElement('canvas');\n this.element.classList.add('ls-viewer-canvas');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.context = this.element.getContext('2d');\n this.backCanvas = document.createElement('canvas');\n this.backContext = this.backCanvas.getContext('2d');\n this.fit = fit;\n this.pixelRatio = 1;\n }\n destroy() {\n if (this.requestAnimationId) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n }\n }\n show(useDisplay) {\n if (useDisplay) {\n this.element.style.display = 'block';\n }\n else {\n this.element.style.opacity = '1';\n }\n }\n hide(useDisplay) {\n if (useDisplay) {\n this.element.style.display = 'none';\n }\n else {\n this.element.style.opacity = '0';\n }\n }\n get resolution() {\n return new Resolution(this.element.width / this.pixelRatio, this.element.height / this.pixelRatio);\n }\n resize(width, height, pixelRatio) {\n this.element.width = width * pixelRatio;\n this.element.height = height * pixelRatio;\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n this.backCanvas.width = width * pixelRatio;\n this.backCanvas.height = height * pixelRatio;\n this.pixelRatio = pixelRatio;\n }\n draw(img, fade, speed) {\n if (!img) {\n return;\n }\n if (this.requestAnimationId) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n }\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\n if (fade) {\n this.backContext.drawImage(this.element, 0, 0);\n this.context.globalAlpha = 0.0;\n this.fadeLoop(img, speed || 0);\n }\n else {\n this.context.globalAlpha = 1.0;\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\n }\n this.image = img;\n }\n fadeLoop(img, speed) {\n if (this.context.globalAlpha >= 1.0) {\n cancelAnimationFrame(this.requestAnimationId);\n this.requestAnimationId = undefined;\n return;\n }\n const alpha = Math.min(this.context.globalAlpha + speed, 1.0);\n const viewport = Viewport.fit(new Resolution(img.width, img.height), new Resolution(this.element.width, this.element.height), this.fit);\n this.context.clearRect(0, 0, this.element.width, this.element.height);\n this.context.globalAlpha = 1.0;\n this.context.drawImage(this.backCanvas, 0, 0);\n this.context.globalAlpha = alpha;\n this.context.drawImage(img, viewport.left, viewport.top, viewport.width, viewport.height);\n this.requestAnimationId = requestAnimationFrame(() => {\n this.fadeLoop(img, speed);\n });\n }\n}\n","import * as twgl from 'twgl.js';\nexport class Canvas3D {\n constructor() {\n this.element = document.createElement('canvas');\n this.element.classList.add('ls-viewer-canvas');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.context = twgl.getContext(this.element, { preserveDrawingBuffer: true });\n twgl.setDefaultTextureColor([1, 1, 1, 1]);\n }\n show() {\n this.element.style.opacity = '1';\n }\n hide() {\n this.element.style.opacity = '0';\n }\n resize(width, height, pixelRatio) {\n this.element.width = width * pixelRatio;\n this.element.height = height * pixelRatio;\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n }\n}\n","export class Maths {\n static accelerate(v, f) {\n const factor = f || 1.5;\n return Math.abs(v) ** factor * (v > 0 ? 1 : -1);\n }\n static clamp(v, min, max) {\n return Math.max(Math.min(v, max), min);\n }\n static degreesToRadians(a) {\n return a * (Math.PI / 180);\n }\n static radiansToDegrees(a) {\n return a * (180 / Math.PI);\n }\n static mod(x, y) {\n return x - y * Math.floor(x / y);\n }\n static perspectiveWithFovX(fovX, aspect, near, far, dst) {\n const right = Math.tan(fovX / 2.0);\n const top = right / aspect;\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\n }\n static perspectiveWithFovY(fovY, aspect, near, far, dst) {\n const top = near * Math.tan(fovY / 2.0);\n const right = top * aspect;\n return this.perspectiveWithLeft(-right, right, -top, top, near, far, dst);\n }\n static perspectiveWithLeft(left, right, bottom, top, near, far, dst) {\n dst = dst || new Float32Array(16);\n const ral = right + left;\n const rsl = right - left;\n const tab = top + bottom;\n const tsb = top - bottom;\n const fsn = far - near;\n dst[0] = (2 * near) / rsl;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = (2 * near) / tsb;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = ral / rsl;\n dst[9] = tab / tsb;\n dst[10] = -far / fsn;\n dst[11] = -1.0;\n dst[12] = 0.0;\n dst[13] = 0.0;\n dst[14] = (-far * near) / fsn;\n dst[15] = 0.0;\n return dst;\n }\n}\n","import { m4, v3 } from 'twgl.js';\nexport class PointOfView {\n static initCubeFace(eye, target, face) {\n let up = [0, 0, 0];\n const v = v3.subtract(target, eye);\n const c = v3.mulScalar([0, 1, 0], v3.length(v));\n const b = v3.mulScalar(v3.normalize(v3.cross(v, c)), v3.length(v));\n const a = v3.mulScalar(v3.normalize(v3.cross(c, b)), v3.length(v));\n switch (face) {\n case 'front':\n target = v3.add(eye, a);\n up = v3.normalize(c);\n break;\n case 'right':\n target = v3.add(eye, b);\n up = v3.normalize(c);\n break;\n case 'back':\n target = v3.subtract(eye, a);\n up = v3.normalize(c);\n break;\n case 'left':\n target = v3.subtract(eye, b);\n up = v3.normalize(c);\n break;\n case 'up':\n target = v3.add(eye, c);\n up = v3.normalize(v3.mulScalar(a, -1));\n break;\n case 'down':\n target = v3.subtract(eye, c);\n up = v3.normalize(a);\n break;\n }\n return new PointOfView(target, eye, up);\n }\n constructor(target, eye, up) {\n this.target = v3.copy(target);\n this.eye = v3.copy(eye);\n this.up = v3.copy(up);\n }\n get viewVector() {\n return v3.subtract(this.target, this.eye);\n }\n get rightVector() {\n return v3.normalize(v3.cross(this.viewVector, this.up));\n }\n get viewMatrix() {\n return m4.inverse(m4.lookAt(this.eye, this.target, this.up));\n }\n clone() {\n return new PointOfView(v3.copy(this.target), v3.copy(this.eye), v3.copy(this.up));\n }\n}\nPointOfView.default = new PointOfView([0.0, 0.0, 0.0], [2.0, 2.0, 2.0], [0.0, 1.0, 0.0]);\n","import { m4, v3 } from 'twgl.js';\nimport { PointOfView } from './PointOfView';\nexport class Spherical {\n constructor(pov) {\n this.target = pov.target;\n const view = v3.normalize(v3.subtract(pov.eye, pov.target));\n const x = v3.dot(view, [1, 0, 0]);\n const y = v3.dot(view, [0, 1, 0]);\n const z = v3.dot(view, [0, 0, 1]);\n this.longitude = Math.atan2(x, z);\n this.latitude = Math.atan2(y, Math.sqrt(x * x + z * z));\n if (v3.dot(pov.up, [0, 1, 0]) < 0) {\n this.longitude = Math.PI + this.longitude;\n this.latitude = Math.PI - this.latitude;\n }\n this.distance = v3.length(v3.subtract(pov.target, pov.eye));\n }\n get vector() {\n const x1 = Math.cos(this.latitude) * this.distance;\n const y1 = Math.sin(this.latitude) * this.distance;\n const x2 = Math.cos(this.longitude) * x1;\n const z2 = Math.sin(this.longitude) * x1;\n return [x2, y1, z2];\n }\n pointOfView(target) {\n const alphaMatrix = m4.rotationY(this.longitude);\n const betaMatrix = m4.rotationX(-this.latitude);\n const rollMatrix = m4.rotationZ(0);\n const m = m4.multiply(alphaMatrix, m4.multiply(betaMatrix, rollMatrix));\n let view = [0.0, 0.0, -1.0];\n view = m4.transformPoint(m, view);\n let up = [0.0, 1.0, 0.0];\n up = m4.transformPoint(m, up);\n const eye = v3.subtract(target, v3.mulScalar(view, this.distance));\n return new PointOfView(target, eye, up);\n }\n}\n","export class WebRenderStatic {\n constructor() { }\n async animation(snapshot) {\n return snapshot.scene;\n }\n async database(databaseId) {\n throw new Error('Unavailable');\n }\n async image(snapshot) {\n return snapshot.scene;\n }\n async video(snapshot) {\n return snapshot.scene;\n }\n async vrCube(snapshot) {\n return snapshot.scene;\n }\n async vrObject(snapshot) {\n return snapshot.scene;\n }\n}\n","import { PointOfView } from './PointOfView';\nexport class Database {\n constructor(xmlDoc) {\n this.xmlDoc = xmlDoc;\n }\n get id() {\n var _a;\n return (_a = this.xmlDoc.getElementsByTagName('Database')[0]) === null || _a === void 0 ? void 0 : _a.getAttribute('id');\n }\n getCameraId(cameraName, cameraGroup) {\n var _a, _b;\n if (cameraGroup) {\n return (_a = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${cameraGroup}\"] Camera[name=\"${cameraName}\"]`)) === null || _a === void 0 ? void 0 : _a.getAttribute('id');\n }\n else {\n return (_b = this.xmlDoc.querySelector(`RootCameraGroup Camera[name=\"${cameraName}\"]`)) === null || _b === void 0 ? void 0 : _b.getAttribute('id');\n }\n }\n getCameraById(cameraId, groupId) {\n let element;\n if (cameraId && groupId) {\n element = this.xmlDoc.querySelector(`RootCameraGroup Group[id=\"${groupId}\"] Camera[id=\"${cameraId}\"]`);\n }\n else {\n element = this.xmlDoc.querySelector(`RootCameraGroup Camera[id=\"${cameraId}\"]`);\n }\n return element ? this.mapElementToCamera(element) : null;\n }\n getCameraByName(cameraName, groupName) {\n let element;\n if (groupName && cameraName) {\n element = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${groupName}\"] Camera[name=\"${cameraName}\"]`);\n }\n else {\n element = this.xmlDoc.querySelector(`RootCameraGroup Camera[name=\"${cameraName}\"]`);\n }\n return element ? this.mapElementToCamera(element) : null;\n }\n getCameraGroupId(cameraGroup) {\n var _a;\n return (_a = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${cameraGroup}\"]`)) === null || _a === void 0 ? void 0 : _a.getAttribute('id');\n }\n getCameraGroupById(id) {\n const element = this.xmlDoc.querySelector(`RootCameraGroup Group[id=\"${id}\"]`);\n return element ? this.mapElementToCameraGroup(element) : null;\n }\n getCameraGroupByName(name) {\n const element = this.xmlDoc.querySelector(`RootCameraGroup Group[name=\"${name}\"]`);\n return element ? this.mapElementToCameraGroup(element) : null;\n }\n mapElementToCamera(element) {\n return {\n id: element.getAttribute('id'),\n name: element.getAttribute('name'),\n pointOfView: new PointOfView([\n parseFloat(element.querySelector('PointOfView Target').getAttribute('x')),\n parseFloat(element.querySelector('PointOfView Target').getAttribute('y')),\n parseFloat(element.querySelector('PointOfView Target').getAttribute('z'))\n ], [\n parseFloat(element.querySelector('PointOfView Eye').getAttribute('x')),\n parseFloat(element.querySelector('PointOfView Eye').getAttribute('y')),\n parseFloat(element.querySelector('PointOfView Eye').getAttribute('z'))\n ], [\n parseFloat(element.querySelector('PointOfView Up').getAttribute('x')),\n parseFloat(element.querySelector('PointOfView Up').getAttribute('y')),\n parseFloat(element.querySelector('PointOfView Up').getAttribute('z'))\n ])\n };\n }\n mapElementToCameraGroup(element) {\n return {\n id: element.getAttribute('id'),\n name: element.getAttribute('name'),\n cameras: [...element.querySelectorAll('Camera')].map(el => this.mapElementToCamera(el))\n };\n }\n}\n","import { Database } from './Database';\nexport class WebRenderV1 {\n constructor(server) {\n this.server = server;\n }\n static buildQuery(request) {\n return Object.entries(request)\n .filter(([k, v]) => v !== null && v !== undefined)\n .map(([k, v]) => `${k}=${v}`)\n .join('&');\n }\n static sceneParameters(snapshot) {\n var _a, _b;\n const scene = snapshot.scene;\n const accessory = scene.length > 1 ? scene.find(p => p.accessory) : null;\n const decor = scene.length > 1 ? scene.find(p => p.decor) : null;\n const product = scene.find(p => p !== accessory && p !== decor);\n return {\n databaseId: product.database,\n configuration: product === null || product === void 0 ? void 0 : product.configuration,\n animations: (_a = product === null || product === void 0 ? void 0 : product.animations) === null || _a === void 0 ? void 0 : _a.join('/'),\n accessoryDatabaseId: accessory === null || accessory === void 0 ? void 0 : accessory.database,\n decorDatabaseId: decor === null || decor === void 0 ? void 0 : decor.database,\n decorDeltaAltitude: (_b = decor === null || decor === void 0 ? void 0 : decor.translation) === null || _b === void 0 ? void 0 : _b.y\n };\n }\n static renderParameters(snapshot) {\n const { parameters, view } = snapshot;\n return {\n background: view.background,\n width: parameters.width,\n height: parameters.height,\n softwareAntialiasing: parameters.antialiasing,\n superSampling: parameters.superSampling\n };\n }\n static encoderParameters(snapshot) {\n const { encoder } = snapshot;\n return {\n imageFormat: encoder.format,\n imageQuality: encoder.quality\n };\n }\n static async fetch(url) {\n return fetch(url)\n .then(response => response.text())\n .then(responseText => {\n const xml = responseText.replace(/&/g, '&');\n const matches = xml.match(this.xmlRegex);\n if (!matches) {\n return Promise.reject();\n }\n return matches.map(m => m.replace(this.xmlRegex, '$1'));\n });\n }\n async animation(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], frames: snapshot.view.frames, loop: !!snapshot.view.loop }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/ImagesFromAnimation?${queryString}`);\n }\n async database(databaseId) {\n return fetch(`${this.server}/Database?databaseId=${databaseId}`)\n .then(response => response.text())\n .then(responseText => {\n const xmlDoc = new DOMParser().parseFromString(responseText, 'application/xml');\n return new Database(xmlDoc);\n });\n }\n async image(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return Promise.resolve(`${this.server}/ImageFromBookmark?${queryString}`);\n }\n async video(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { animation: snapshot.view.animation, bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1], duration: snapshot.view.duration, frames: snapshot.view.frames, loop: !!snapshot.view.loop, reverse: !!snapshot.view.reverse }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return Promise.resolve(`${this.server}/ImagesFromAnimation?${queryString}`);\n }\n async vrCube(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera.split('/')[0], bookmark: snapshot.view.camera.split('/')[1] }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n request.width = Math.max(request.width, request.height);\n request.height = Math.max(request.width, request.height);\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/CubeFromBookmark?${queryString}`);\n }\n async vrObject(snapshot) {\n const request = Object.assign(Object.assign(Object.assign(Object.assign({}, WebRenderV1.sceneParameters(snapshot)), { bookmarkSet: snapshot.view.camera }), WebRenderV1.renderParameters(snapshot)), WebRenderV1.encoderParameters(snapshot));\n const queryString = WebRenderV1.buildQuery(request);\n return WebRenderV1.fetch(`${this.server}/ImagesFromBookmarkSet?${queryString}`);\n }\n}\nWebRenderV1.xmlRegex = /directUrl=\"([^\"]*)\"/g;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import { __rest } from \"tslib\";\nimport { Database } from './Database';\nexport class WebRenderV2 {\n constructor(server) {\n this.server = server;\n }\n static scene(snapshot) {\n return snapshot.scene.map(p => {\n const { accessory, decor } = p, pResult = __rest(p, [\"accessory\", \"decor\"]);\n return pResult;\n });\n }\n static renderParameters(snapshot) {\n return Object.assign(Object.assign({}, snapshot.parameters), { superSampling: snapshot.parameters.superSampling.toString() });\n }\n static encoder(snapshot) {\n switch (snapshot.encoder.format) {\n case 'jpeg':\n return {\n jpeg: {\n quality: snapshot.encoder.quality\n }\n };\n case 'png':\n return {\n png: {\n compression: snapshot.encoder.compression\n }\n };\n case 'webp':\n return {\n webp: {\n quality: snapshot.encoder.quality\n }\n };\n }\n return {\n jpeg: {\n quality: 80\n }\n };\n }\n static async fetchFrame(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) })\n .then(response => response.json())\n .then((data) => {\n return data.url;\n });\n }\n static async fetchFrameArray(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) })\n .then(response => response.json())\n .then((data) => {\n return data.map(f => f.url);\n });\n }\n static async fetchHotspots(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json());\n }\n static async fetchHotspotsArray(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) }).then(response => response.json());\n }\n static async fetchPick(url, body) {\n return fetch(url, { method: 'POST', body: JSON.stringify(body) })\n .then(response => response.json())\n .then((response) => response[0]);\n }\n async database(databaseId) {\n return fetch(`${this.server}/Database?databaseId=${databaseId}`)\n .then(response => response.text())\n .then(responseText => {\n const xmlDoc = new DOMParser().parseFromString(responseText, 'application/xml');\n return new Database(xmlDoc);\n });\n }\n async image(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n image: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrame(`${this.server}/Snapshot`, body);\n }\n async vrCube(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n vrCube: {\n camera: snapshot.view.camera\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async vrObject(snapshot) {\n let mode;\n if (snapshot.view.cameraGroup) {\n mode = {\n images: {\n cameraGroup: snapshot.view.cameraGroup\n }\n };\n }\n else {\n if (snapshot.view.frames) {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n frames: snapshot.view.frames\n }\n };\n }\n else {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n panFrames: snapshot.view.panFrames || 1,\n panFrom: snapshot.view.panFrom || 0,\n panTo: snapshot.view.panTo || 0,\n panLoop: snapshot.view.panLoop || false,\n tiltFrames: snapshot.view.tiltFrames || 1,\n tiltFrom: snapshot.view.tiltFrom || 0,\n tiltTo: snapshot.view.tiltTo || 0,\n tiltLoop: snapshot.view.tiltLoop || false\n }\n };\n }\n }\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode,\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async animation(snapshot) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n mode: {\n animation: {\n id: snapshot.view.animation,\n camera: snapshot.view.camera,\n fps: snapshot.view.fps\n }\n },\n renderParameters: WebRenderV2.renderParameters(snapshot),\n encoder: WebRenderV2.encoder(snapshot)\n };\n return WebRenderV2.fetchFrameArray(`${this.server}/Snapshot`, body);\n }\n async imageHotspots(snapshot, hotspots) {\n const body = Object.assign({ scene: WebRenderV2.scene(snapshot), mode: {\n image: {\n camera: snapshot.view.camera\n }\n }, renderParameters: WebRenderV2.renderParameters(snapshot) }, this.hotspotsBody(hotspots));\n return await WebRenderV2.fetchHotspots(`${this.server}/Hotspot`, body);\n }\n async imagePick(snapshot, position) {\n const body = {\n scene: WebRenderV2.scene(snapshot),\n camera: snapshot.view.camera,\n renderParameters: WebRenderV2.renderParameters(snapshot),\n positions: [position]\n };\n return await WebRenderV2.fetchPick(`${this.server}/Pick`, body);\n }\n async vrCubeHotspots(snapshot, hotspots) {\n const body = Object.assign({ scene: WebRenderV2.scene(snapshot), mode: {\n vrCube: {\n camera: snapshot.view.camera\n }\n }, renderParameters: WebRenderV2.renderParameters(snapshot) }, this.hotspotsBody(hotspots));\n body.renderParameters.width = Math.max(body.renderParameters.width, body.renderParameters.height);\n body.renderParameters.height = Math.max(body.renderParameters.width, body.renderParameters.height);\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\n }\n async vrObjectHotspots(snapshot, hotspots) {\n let mode;\n if (snapshot.view.cameraGroup) {\n mode = {\n images: {\n cameraGroup: snapshot.view.cameraGroup\n }\n };\n }\n else {\n if (snapshot.view.frames) {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n frames: snapshot.view.frames\n }\n };\n }\n else {\n mode = {\n vrObject: {\n camera: snapshot.view.camera,\n panFrames: snapshot.view.panFrames || 1,\n panFrom: snapshot.view.panFrom || 0,\n panTo: snapshot.view.panTo || 0,\n panLoop: snapshot.view.panLoop || false,\n tiltFrames: snapshot.view.tiltFrames || 1,\n tiltFrom: snapshot.view.tiltFrom || 0,\n tiltTo: snapshot.view.tiltTo || 0,\n tiltLoop: snapshot.view.tiltLoop || false\n }\n };\n }\n }\n const body = Object.assign({ scene: WebRenderV2.scene(snapshot), mode, renderParameters: WebRenderV2.renderParameters(snapshot) }, this.hotspotsBody(hotspots));\n return await WebRenderV2.fetchHotspotsArray(`${this.server}/Hotspot`, body);\n }\n hotspotsBody(hotspots) {\n return {\n positions: hotspots.every(hotspot => typeof hotspot !== 'string') ? hotspots : undefined,\n tags: hotspots.every(hotspot => typeof hotspot === 'string') ? hotspots : undefined\n };\n }\n}\n","import { Maths } from './Maths';\nimport { PointOfView } from './PointOfView';\nimport { Spherical } from './Spherical';\nimport { WebRenderStatic } from './WebRenderStatic';\nimport { WebRenderV1 } from './WebRenderV1';\nimport { WebRenderV2 } from './WebRenderV2';\nexport class Loader {\n constructor(server, api, delegate) {\n switch (api) {\n case 'static':\n this.webrender = new WebRenderStatic();\n break;\n case 'v1':\n this.webrender = new WebRenderV1(server);\n this.webrenderV2 = new WebRenderV2(server);\n break;\n case 'v2':\n this.webrender = new WebRenderV2(server);\n this.webrenderV2 = new WebRenderV2(server);\n break;\n default:\n this.webrender = new WebRenderV1(server);\n this.webrenderV2 = new WebRenderV2(server);\n break;\n }\n this.delegate = delegate;\n this.loadingId = 0;\n this.loaded = 0;\n this.total = 0;\n this.databases = [];\n this.onLoadStart = delegate && delegate.onLoadStart ? delegate.onLoadStart : () => { };\n this.onLoadProgress = delegate && delegate.onLoadProgress ? delegate.onLoadProgress : () => { };\n this.onLoadEnd = delegate && delegate.onLoadEnd ? delegate.onLoadEnd : () => { };\n }\n get progress() {\n return this.total ? this.loaded / this.total : 0;\n }\n async loadImageSnapshot(snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 1;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender\n .image(snapshot)\n .then(src => this.loadImage(src, loadingId))\n .then(img => {\n this.onLoadEnd(this.progress);\n return img;\n });\n }\n async loadVideoSnapshot(video, snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 1;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender\n .video(snapshot)\n .then(src => this.loadVideo(video, src, !!snapshot.view.loop, loadingId))\n .then(() => {\n this.onLoadEnd(this.progress);\n return video;\n });\n }\n async loadVRCubeSnapshot(snapshot) {\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n return this.webrender\n .vrCube(snapshot)\n .then(srcs => {\n this.total = srcs.length;\n const promises = srcs.map(src => this.loadImage(src, loadingId));\n return Promise.all(promises);\n })\n .then(imgs => {\n this.onLoadEnd(this.progress);\n return imgs;\n });\n }\n async loadVRObjectSnapshot(snapshot, position) {\n var _a;\n this.loadingId += 1;\n this.loaded = 0;\n this.total = 0;\n this.onLoadStart(this.progress);\n const { loadingId } = this;\n if (snapshot.view.animation) {\n if (((_a = snapshot.encoder) === null || _a === void 0 ? void 0 : _a.format) === 'mp4') {\n return this.webrender.video(snapshot).then(src => {\n return this.loadVideoFrames(src, snapshot.view.frames, 30, loadingId);\n });\n }\n else {\n return this.webrender.animation(snapshot).then(srcs => {\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\n });\n }\n }\n else {\n return this.webrender.vrObject(snapshot).then(srcs => {\n return this.loadImageFrames(srcs, snapshot.view.loop, position, loadingId);\n });\n }\n }\n async loadImage(src, loadingId) {\n const image = new Image();\n image.crossOrigin = location.protocol === 'file:' && !Loader.isValidHttpUrl(src) ? null : 'anonymous';\n const promise = new Promise((resolve, reject) => {\n image.addEventListener('load', () => {\n if (loadingId !== this.loadingId)\n return;\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n resolve(image);\n }, { once: true });\n image.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(`${e.type} : ${src}`);\n }, { once: true });\n });\n image.src = src;\n return promise;\n }\n loadImageFrames(srcs, loop, position, loadingId) {\n this.total = srcs.length;\n const promises = new Array(srcs.length);\n const start = position || 0;\n for (let i = 0, n = srcs.length; i < n; i += 1) {\n const step = Math.ceil(i / 2) * (i % 2 === 0 ? 1 : -1);\n const index = loop ? Maths.mod(start + step, n) : i;\n promises[index] = this.loadImage(srcs[index], loadingId);\n }\n Promise.all(promises)\n .then(() => this.onLoadEnd(this.progress))\n .catch(() => { });\n return promises;\n }\n async loadVideo(video, src, loop, loadingId) {\n video.loop = loop;\n const promise = new Promise((resolve, reject) => {\n video.addEventListener('canplaythrough', () => {\n if (loadingId !== this.loadingId)\n return;\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n resolve();\n }, { once: true });\n video.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(`${e.type} : ${src}`);\n }, { once: true });\n });\n video.src = src;\n video.load();\n return promise;\n }\n async loadVideoFrame(video, fps, frames, i, loadingId) {\n let count = 0;\n return new Promise((resolve, reject) => {\n const seeked = () => {\n if (loadingId !== this.loadingId)\n return;\n if (count !== i) {\n count += 1;\n return;\n }\n video.removeEventListener('seeked', seeked);\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const context = canvas.getContext('2d');\n context.drawImage(video, 0, 0);\n const image = new Image();\n image.src = canvas.toDataURL();\n resolve(image);\n this.loaded += 1;\n this.onLoadProgress(this.progress);\n if (i !== frames - 1) {\n video.currentTime += 1 / fps;\n }\n };\n video.addEventListener('seeked', seeked);\n video.addEventListener('error', e => {\n if (loadingId !== this.loadingId)\n return;\n reject(e);\n }, { once: true });\n });\n }\n loadVideoFrames(src, frames, fps, loadingId) {\n this.total = frames;\n const promises = new Array(frames);\n const video = document.createElement('video');\n for (let i = 0, n = frames; i < n; i += 1) {\n promises[i] = this.loadVideoFrame(video, fps, frames, i, loadingId);\n }\n video.addEventListener('canplaythrough', () => {\n if (loadingId !== this.loadingId)\n return;\n video.currentTime = 1 / fps / 2;\n }, { once: true });\n video.src = src;\n video.load();\n Promise.all(promises)\n .then(() => this.onLoadEnd(this.progress))\n .catch(() => { });\n return promises;\n }\n async loadImageHotspots(snapshot, hotspots) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrenderV2.imageHotspots(await this.convert(snapshot), hotspots);\n }\n async loadVRCubeHotspots(snapshot, hotspots) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrenderV2.vrCubeHotspots(await this.convert(snapshot), hotspots);\n }\n async loadVRObjectHotspots(snapshot, hotspots) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Hotspots only available with api V2'));\n }\n return await this.webrenderV2.vrObjectHotspots(await this.convert(snapshot), hotspots);\n }\n async loadImagePick(snapshot, position) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Picking only available with api V2'));\n }\n return await this.webrenderV2.imagePick(await this.convert(snapshot), position);\n }\n async loadVRObjectPick(snapshot, position, index, frames) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Picking only available with api V2'));\n }\n return await this.webrenderV2.imagePick(await this.vrObjectFrameSnapshot(snapshot, index, frames), position);\n }\n async loadVRCubePick(snapshot, position, face) {\n if (!this.webrenderV2) {\n return Promise.reject(new Error('Picking only available with api V2'));\n }\n return await this.webrenderV2.imagePick(await this.vrCubeFrameSnapshot(snapshot, face), position);\n }\n async convert(snapshot) {\n var _a;\n if (!this.webrenderV2) {\n return snapshot;\n }\n if (this.webrender instanceof WebRenderV2) {\n return snapshot;\n }\n if (!snapshot.view.camera) {\n return snapshot;\n }\n const product = snapshot.scene.find(scene => !scene.decor && !scene.accessory);\n if (!product) {\n return snapshot;\n }\n let database = this.databases.find(db => db.id === product.database);\n if (!database || !database.xmlDoc) {\n database = await this.webrender.database(product.database);\n this.databases.push(database);\n }\n const values = (_a = snapshot.view.camera) === null || _a === void 0 ? void 0 : _a.split('/');\n const cameraGroup = values.length === 2 ? values[0] : undefined;\n const cameraName = values.length === 2 ? values[1] : values[0];\n const cameraId = database.getCameraId(cameraName, cameraGroup);\n if (cameraId) {\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: cameraId }) });\n }\n else {\n const cameraGroupId = database.getCameraGroupId(cameraName);\n if (cameraGroupId) {\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { cameraGroup: cameraGroupId }) });\n }\n else {\n return snapshot;\n }\n }\n }\n async vrObjectFrameSnapshot(snapshot, index, frames) {\n if (!this.webrenderV2) {\n return snapshot;\n }\n const product = snapshot.scene.find(scene => !scene.decor && !scene.accessory);\n if (!product) {\n return snapshot;\n }\n let database = this.databases.find(db => db.id === product.database);\n if (!database) {\n database = await this.webrender.database(product.database);\n this.databases.push(database);\n }\n if (this.webrender instanceof WebRenderV1) {\n if (!snapshot.view.camera) {\n return snapshot;\n }\n const cameraGroupId = database.getCameraGroupId(snapshot.view.camera);\n if (!cameraGroupId) {\n return snapshot;\n }\n const cameraGroup = database.getCameraGroupById(cameraGroupId);\n if (!cameraGroup) {\n return snapshot;\n }\n const camera = cameraGroup.cameras[index];\n if (!camera) {\n return snapshot;\n }\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: camera.id }) });\n }\n else if (this.webrender instanceof WebRenderV2) {\n if (snapshot.view.camera) {\n const camera = database.getCameraById(snapshot.view.camera);\n if (!camera) {\n return snapshot;\n }\n const spherical = new Spherical(camera.pointOfView);\n const step = (2 * Math.PI) / frames;\n spherical.longitude += (index * step) % (2 * Math.PI);\n const pov = spherical.pointOfView(camera.pointOfView.target);\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: {\n id: camera.id,\n pov: {\n target: {\n x: pov.target[0],\n y: pov.target[1],\n z: pov.target[2]\n },\n eye: {\n x: pov.eye[0],\n y: pov.eye[1],\n z: pov.eye[2]\n },\n up: {\n x: pov.up[0],\n y: pov.up[1],\n z: pov.up[2]\n }\n }\n } }) });\n }\n else if (snapshot.view.cameraGroup) {\n const cameraGroup = database.getCameraGroupById(snapshot.view.cameraGroup);\n if (!cameraGroup) {\n return snapshot;\n }\n const camera = cameraGroup.cameras[index];\n if (!camera) {\n return snapshot;\n }\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: camera.id }) });\n }\n else {\n return snapshot;\n }\n }\n else {\n return snapshot;\n }\n }\n async vrCubeFrameSnapshot(snapshot, face) {\n const product = snapshot.scene.find(scene => !scene.decor && !scene.accessory);\n if (!product) {\n return snapshot;\n }\n let database = this.databases.find(db => db.id === product.database);\n if (!database) {\n database = await this.webrender.database(product.database);\n this.databases.push(database);\n }\n if (!snapshot.view.camera) {\n return snapshot;\n }\n let cameraId;\n if (this.webrender instanceof WebRenderV1) {\n const values = snapshot.view.camera.split('/');\n const cameraGroup = values.length === 2 ? values[0] : undefined;\n const cameraName = values.length === 2 ? values[1] : values[0];\n cameraId = database.getCameraId(cameraName, cameraGroup);\n }\n else if (this.webrender instanceof WebRenderV2) {\n cameraId = snapshot.view.camera;\n }\n if (!cameraId) {\n return snapshot;\n }\n const camera = database.getCameraById(cameraId);\n if (!camera) {\n return snapshot;\n }\n const pointOfView = PointOfView.initCubeFace(camera.pointOfView.eye, camera.pointOfView.target, face);\n return Object.assign(Object.assign({}, snapshot), { view: Object.assign(Object.assign({}, snapshot.view), { camera: {\n id: camera.id,\n pov: {\n target: {\n x: pointOfView.target[0],\n y: pointOfView.target[1],\n z: pointOfView.target[2]\n },\n eye: {\n x: pointOfView.eye[0],\n y: pointOfView.eye[1],\n z: pointOfView.eye[2]\n },\n up: {\n x: pointOfView.up[0],\n y: pointOfView.up[1],\n z: pointOfView.up[2]\n }\n },\n lens: {\n fov: 90\n }\n } }), parameters: Object.assign(Object.assign({}, snapshot.parameters), { width: Math.max(snapshot.parameters.width, snapshot.parameters.height), height: Math.max(snapshot.parameters.width, snapshot.parameters.height) }) });\n }\n onLoadStart(progress) {\n if (this.delegate) {\n this.delegate.onLoadStart(progress);\n }\n }\n onLoadProgress(progress) {\n if (this.delegate) {\n this.delegate.onLoadProgress(progress);\n }\n }\n onLoadEnd(progress) {\n if (this.delegate) {\n this.delegate.onLoadEnd(progress);\n }\n }\n static isValidHttpUrl(str) {\n let url;\n try {\n url = new URL(str);\n }\n catch (_) {\n return false;\n }\n return url.protocol === 'http:' || url.protocol === 'https:';\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class Video {\n constructor() {\n this.element = document.createElement('video');\n this.element.classList.add('ls-viewer-video');\n this.element.style.opacity = '0';\n this.element.width = 0;\n this.element.height = 0;\n this.element.setAttribute('muted', '');\n this.element.setAttribute('playsinline', '');\n this.element.setAttribute('preload', 'auto');\n }\n show() {\n this.element.style.opacity = '1';\n }\n hide() {\n this.element.style.opacity = '0';\n }\n resize(width, height, resolution, fit) {\n const viewport = Viewport.fit(resolution, new Resolution(width, height), fit);\n this.element.style.top = `${viewport.top}px`;\n this.element.style.left = `${viewport.left}px`;\n this.element.style.width = `${viewport.width}px`;\n this.element.style.height = `${viewport.height}px`;\n if (resolution.width !== this.element.width || resolution.height !== this.element.height) {\n this.element.width = resolution.width;\n this.element.height = resolution.height;\n }\n }\n}\n","import { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class WidgetImage {\n constructor(container, canvas, loader) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.hotspotList = [];\n }\n destroy() { }\n show() {\n this.canvas.show(false);\n this.container.classList.add('ls-viewer-container-image');\n }\n hide() {\n this.canvas.hide(false);\n this.container.classList.remove('ls-viewer-container-image');\n }\n async load(snapshot, hotspots, reset, fade) {\n let promise = Promise.resolve();\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash && this.image) {\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\n }\n else {\n promise = promise.then(() => this.loader.loadImageSnapshot(snapshot).then(image => {\n this.canvas.draw(image, fade, 0.05);\n this.image = image;\n }));\n }\n const hotspotsHash = JSON.stringify(hotspots);\n if (snapshotHash !== this.snapshotHash || hotspotsHash !== this.hotspotsHash) {\n if (hotspots.length) {\n promise = promise.then(() => this.loader.loadImageHotspots(snapshot, hotspots).then(hotspots => {\n this.hotspotList = hotspots;\n }));\n }\n else {\n this.hotspotList = [];\n }\n }\n this.hotspotsHash = hotspotsHash;\n this.snapshotHash = snapshotHash;\n return promise;\n }\n async pick(snapshot, position) {\n const resolution = new Resolution(snapshot.parameters.width, snapshot.parameters.height);\n const unprojectedPosition = Viewport.unproject(resolution, this.canvas.resolution, this.canvas.fit, position);\n return this.loader.loadImagePick(snapshot, unprojectedPosition);\n }\n hotspots(resolution) {\n return this.hotspotList\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { position2D: Viewport.project(resolution, this.canvas.resolution, this.canvas.fit, hotspot.position2D) })))\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { visibility: Viewport.contains(this.canvas.resolution, hotspot.position2D) ? hotspot.visibility : 'OutOfFrustum' })));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n onMouseDown(e) { }\n onMouseMove(e) { }\n onMouseUp(e) { }\n onMouseEnter(e) { }\n onTouchStart(e) { }\n onTouchMove(e) { }\n onTouchEnd(e) { }\n onDeviceOrientation(e) { }\n}\n","export class WidgetVideo {\n constructor(container, video, loader) {\n this.container = container;\n this.loader = loader;\n this.video = video;\n }\n destroy() { }\n show() {\n this.video.show();\n this.container.classList.add('ls-viewer-container-video');\n }\n hide() {\n this.video.hide();\n this.container.classList.remove('ls-viewer-container-video');\n }\n async load(snapshot) {\n const hash = JSON.stringify(snapshot);\n if (hash === this.hash) {\n this.video.element.load();\n return Promise.resolve();\n }\n this.hash = hash;\n return this.loader.loadVideoSnapshot(this.video.element, snapshot);\n }\n async pick(snapshot, position) {\n return Promise.reject();\n }\n hotspots(resolution) {\n return [];\n }\n snapshot(type, quality) {\n return 'data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==';\n }\n async play() {\n return new Promise((resolve, reject) => {\n this.video.element.addEventListener('ended', () => {\n resolve();\n }, { once: true });\n this.video.element.play().catch(reject);\n this.show();\n });\n }\n onMouseDown(e) { }\n onMouseMove(e) { }\n onMouseUp(e) { }\n onMouseEnter(e) { }\n onTouchStart(e) { }\n onTouchMove(e) { }\n onTouchEnd(e) { }\n onDeviceOrientation(e) { }\n}\n","export class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n clone() {\n return new Point(this.x, this.y);\n }\n}\n","import { Point } from './Point';\nexport class EventHelper {\n static pointFromMouseEvent(e) {\n return new Point(e.screenX, e.screenY);\n }\n static pointFromTouchEvent(e) {\n const touch = e.targetTouches[0] || e.changedTouches[0];\n return new Point(touch.screenX, touch.screenY);\n }\n}\n","import { m4, v3 } from 'twgl.js';\nexport class Basis3 {\n constructor(...args) {\n if (args.length === 3) {\n ({ 0: this.u, 1: this.v, 2: this.o } = args);\n this.w = v3.cross(this.u, this.v);\n }\n else if (args.length === 4) {\n ({ 0: this.u, 1: this.v, 2: this.w, 3: this.o } = args);\n }\n else {\n this.u = [1, 0, 0];\n this.v = [0, 1, 0];\n this.w = [0, 0, 1];\n this.o = [0, 0, 0];\n }\n }\n get localToGlobalMatrix() {\n const X = [this.u[0], this.u[1], this.u[2], 0.0];\n const Y = [this.v[0], this.v[1], this.v[2], 0.0];\n const Z = [this.w[0], this.w[1], this.w[2], 0.0];\n const W = [this.o[0], this.o[1], this.o[2], 1.0];\n return [...X, ...Y, ...Z, ...W];\n }\n get globalToLocalMatrix() {\n return m4.inverse(this.localToGlobalMatrix);\n }\n}\n","export class InertiaPoint {\n constructor(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time;\n }\n}\n","import { InertiaPoint } from './InertiaPoint';\nimport { Point } from './Point';\nexport class Inertia {\n constructor(onMotion) {\n this.points = [];\n this.onMotion = onMotion;\n this.lastPoint = new Point(0.0, 0.0);\n this.velocity = new Point(0.0, 0.0);\n this.loop = this.loop.bind(this);\n }\n destroy() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n track(point) {\n const time = Date.now();\n this.points = this.points.filter(p => time - p.time <= 100);\n this.points.push(new InertiaPoint(point.x, point.y, time));\n this.lastPoint = point;\n }\n start() {\n if (this.points.length === 0) {\n return;\n }\n const firstPoint = this.points[0];\n const lastPoint = this.points[this.points.length - 1];\n const dx = lastPoint.x - firstPoint.x;\n const dy = lastPoint.y - firstPoint.y;\n const dt = lastPoint.time - firstPoint.time;\n this.velocity = new Point(dt === 0 ? 0 : dx / (dt / 15), dt === 0 ? 0 : dy / (dt / 15));\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n this.animationFrameId = requestAnimationFrame(this.loop);\n }\n stop() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n this.points = [];\n }\n loop() {\n if (Math.abs(this.velocity.x) < 1 && Math.abs(this.velocity.y) < 1) {\n this.animationFrameId = undefined;\n this.points = [];\n return;\n }\n this.lastPoint.x += this.velocity.x;\n this.lastPoint.y += this.velocity.y;\n this.velocity.x *= 0.9;\n this.velocity.y *= 0.9;\n this.onMotion(this.lastPoint.clone());\n this.animationFrameId = requestAnimationFrame(this.loop);\n }\n}\n","import { m4, v3 } from 'twgl.js';\nimport { Basis3 } from './Basis3';\nimport { Inertia } from './Inertia';\nimport { Maths } from './Maths';\nimport { Point } from './Point';\nimport { PointOfView } from './PointOfView';\nexport class InteractiveCamera {\n constructor(pov, fov, onMotion) {\n this.isStarted = false;\n this.pov = pov;\n this.fov = Maths.degreesToRadians(fov);\n this.orientationMatrix = m4.identity();\n this.inertia = new Inertia(this.motion.bind(this));\n this.onMotion = onMotion;\n this.initPov = this.pov;\n this.initFov = this.fov;\n this.initOrientation = Maths.degreesToRadians(window.orientation) || 0;\n this.startPov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\n this.startSize = { width: 0.0, height: 0.0 };\n this.previousPoint = new Point(0.0, 0.0);\n }\n destroy() {\n this.inertia.destroy();\n }\n get orientedPov() {\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\n const matrix = m4.identity();\n m4.multiply(matrix, headBasis.localToGlobalMatrix, matrix);\n m4.multiply(matrix, this.orientationMatrix, matrix);\n m4.multiply(matrix, headBasis.globalToLocalMatrix, matrix);\n const target = m4.transformDirection(matrix, this.pov.target);\n const eye = this.pov.eye;\n const up = m4.transformDirection(matrix, this.pov.up);\n return new PointOfView(target, eye, up);\n }\n reset() {\n this.pov = this.initPov.clone();\n this.fov = this.initFov;\n }\n start(point, size) {\n this.isStarted = true;\n this.startPov = this.pov;\n this.startSize = size;\n this.previousPoint = point;\n this.inertia.stop();\n }\n motion(point) {\n if (this.isStarted) {\n this.inertia.track(point);\n }\n const delta = {\n x: point.x - this.previousPoint.x,\n y: point.y - this.previousPoint.y\n };\n const dx = (Maths.accelerate(delta.x, 1.3) / this.startSize.width) * 0.2 * Math.PI * 1.5;\n const dy = (Maths.accelerate(delta.y, 1.3) / this.startSize.height) * 0.2 * Math.PI;\n const rotationMatrix = m4.multiply(m4.rotationY(-dx), m4.rotationX(-dy));\n const viewVector = v3.normalize(v3.cross(this.pov.up, this.pov.target));\n const headBasis = new Basis3(viewVector, [0.0, 1.0, 0.0], this.pov.eye);\n const headMatrix = m4.identity();\n m4.multiply(headMatrix, headBasis.localToGlobalMatrix, headMatrix);\n m4.multiply(headMatrix, rotationMatrix, headMatrix);\n m4.multiply(headMatrix, headBasis.globalToLocalMatrix, headMatrix);\n const target = m4.transformPoint(headMatrix, this.pov.target);\n const up = m4.transformDirection(headMatrix, this.pov.up);\n if (v3.cross(up, [0, 0, 1])[0] >= 0) {\n this.pov.target = target;\n this.pov.up = up;\n }\n this.previousPoint = point;\n this.onMotion();\n }\n end(point, inertia) {\n this.isStarted = false;\n if (inertia) {\n this.inertia.track(point);\n this.inertia.start();\n }\n }\n orientation(alpha, beta, gamma) {\n const orientation = Maths.degreesToRadians(window.orientation) || 0;\n const alphaRadians = Maths.degreesToRadians(alpha);\n const betaRadians = Maths.degreesToRadians(-beta);\n const gammaRadians = Maths.degreesToRadians(-gamma);\n const matrix = m4.rotationX(Maths.degreesToRadians(90));\n m4.rotateZ(matrix, this.initOrientation, matrix);\n m4.rotateZ(matrix, alphaRadians, matrix);\n m4.rotateX(matrix, betaRadians, matrix);\n m4.rotateY(matrix, gammaRadians, matrix);\n m4.rotateZ(matrix, -orientation, matrix);\n this.orientationMatrix = matrix;\n this.onMotion();\n }\n}\n","import * as twgl from 'twgl.js';\nimport { m4, v3 } from 'twgl.js';\nimport { EventHelper } from './EventHelper';\nimport { InteractiveCamera } from './InteractiveCamera';\nimport { Maths } from './Maths';\nimport { PointOfView } from './PointOfView';\nimport { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nimport WidgetVRCubeFragmentShader from './WidgetVRCube.frag';\nimport WidgetVRCubeVertexShader from './WidgetVRCube.vert';\nexport class WidgetVRCube {\n constructor(container, canvas, loader, onInteraction) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.images = [];\n this.hotspotsList = [[]];\n const pov = new PointOfView([0.0, 0.0, 1.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0]);\n const fov = 60;\n const rotationMatrix = m4.rotationX(Maths.degreesToRadians(15));\n m4.transformDirection(rotationMatrix, pov.target, pov.target);\n m4.transformDirection(rotationMatrix, pov.up, pov.up);\n this.interaction = new InteractiveCamera(pov, fov, () => {\n this.animationFrameId = requestAnimationFrame(this.render);\n this.onInteraction({\n pov: this.interaction.pov.clone(),\n fov: this.interaction.fov\n });\n });\n this.onInteraction = onInteraction;\n this.gl = this.canvas.context;\n this.programInfo = twgl.createProgramInfo(this.gl, [`${WidgetVRCubeVertexShader}\\n`, `${WidgetVRCubeFragmentShader}\\n`]);\n this.quad = twgl.primitives.createXYQuadBufferInfo(this.gl);\n this.uniforms = {\n u_matrix: m4.identity(),\n u_mix: 0.0,\n u_texture_back: twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR,\n width: 1,\n height: 1\n }),\n u_texture: twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n minMag: this.gl.LINEAR,\n width: 1,\n height: 1\n })\n };\n this.render = this.render.bind(this);\n }\n destroy() {\n this.interaction.destroy();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n show() {\n this.canvas.show();\n this.container.classList.add('ls-viewer-container-vrcube');\n }\n hide() {\n this.canvas.hide();\n this.container.classList.remove('ls-viewer-container-vrcube');\n }\n get pov() {\n return this.interaction.pov;\n }\n set pov(pov) {\n if (this.interaction.pov.eye.every((v, i) => v === pov.eye[i]) && this.interaction.pov.target.every((v, i) => v === pov.target[i]) && this.interaction.pov.up.every((v, i) => v === pov.up[i])) {\n return;\n }\n this.interaction.pov = pov.clone();\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n get fov() {\n return Maths.radiansToDegrees(this.interaction.fov);\n }\n set fov(fov) {\n if (this.interaction.fov === fov) {\n return;\n }\n this.interaction.fov = Maths.degreesToRadians(fov);\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n async load(snapshot, hotspots, reset, fade) {\n let promise = Promise.resolve();\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash) {\n promise = promise.then(() => {\n this.animationFrameId = requestAnimationFrame(this.render);\n return Promise.resolve();\n });\n }\n else {\n this.images = [];\n this.animationFrameId = requestAnimationFrame(this.render);\n promise = promise.then(() => this.loader.loadVRCubeSnapshot(snapshot).then(images => {\n this.images = images;\n twgl.createTexture(this.gl, {\n target: this.gl.TEXTURE_CUBE_MAP,\n min: this.gl.LINEAR_MIPMAP_LINEAR,\n minMag: this.gl.LINEAR,\n cubeFaceOrder: [this.gl.TEXTURE_CUBE_MAP_POSITIVE_Z, this.gl.TEXTURE_CUBE_MAP_POSITIVE_X, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_X, this.gl.TEXTURE_CUBE_MAP_POSITIVE_Y, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y],\n src: images\n }, (err, texture) => {\n if (err) {\n return;\n }\n if (reset) {\n this.interaction.reset();\n }\n this.uniforms.u_mix = fade ? 0.0 : 1.0;\n this.uniforms.u_texture_back = this.uniforms.u_texture;\n this.uniforms.u_texture = texture;\n this.animationFrameId = requestAnimationFrame(this.render);\n });\n }));\n }\n const hotspotsHash = JSON.stringify(hotspots);\n if (snapshotHash !== this.snapshotHash || hotspotsHash !== this.hotspotsHash) {\n if (hotspots.length) {\n promise = promise.then(() => this.loader.loadVRCubeHotspots(snapshot, hotspots).then(hotspots => {\n this.hotspotsList = hotspots;\n }));\n }\n else {\n this.hotspotsList = [[]];\n }\n }\n this.hotspotsHash = hotspotsHash;\n this.snapshotHash = snapshotHash;\n return promise;\n }\n async pick(snapshot, position) {\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const point2D = [1 - (2 * position.x) / width, 1 - (2 * position.y) / height];\n const point3D = v3.normalize(m4.transformPoint(this.modelViewProjectionMatrix, [point2D[0], point2D[1], 0]));\n const max = Math.max(...[Math.abs(point3D[0]), Math.abs(point3D[1]), Math.abs(point3D[2])]);\n let target = '';\n if (Math.abs(point3D[0]) === max) {\n target = point3D[0] > 0 ? 'XPOS' : 'XNEG';\n }\n else if (Math.abs(point3D[1]) === max) {\n target = point3D[1] > 0 ? 'YPOS' : 'YNEG';\n }\n else {\n target = point3D[2] > 0 ? 'ZPOS' : 'ZNEG';\n }\n let s = 0;\n let t = 0;\n let face = '';\n switch (target) {\n case 'XPOS':\n s = (-point3D[2] / point3D[0] + 1) / 2;\n t = (-point3D[1] / point3D[0] + 1) / 2;\n face = 'right';\n break;\n case 'XNEG':\n s = (point3D[2] / point3D[0] + 1) / 2;\n t = (-point3D[1] / point3D[0] + 1) / 2;\n face = 'left';\n break;\n case 'YPOS':\n s = (point3D[0] / point3D[1] + 1) / 2;\n t = (point3D[2] / point3D[1] + 1) / 2;\n face = 'up';\n break;\n case 'YNEG':\n s = (point3D[0] / point3D[1] + 1) / 2;\n t = (-point3D[2] / point3D[1] + 1) / 2;\n face = 'down';\n break;\n case 'ZPOS':\n s = (point3D[0] / point3D[2] + 1) / 2;\n t = (-point3D[1] / point3D[2] + 1) / 2;\n face = 'front';\n break;\n case 'ZNEG':\n s = (-point3D[0] / point3D[2] + 1) / 2;\n t = (-point3D[1] / point3D[2] + 1) / 2;\n face = 'back';\n break;\n }\n const pos = {\n x: Math.round(s * Math.max(snapshot.parameters.width, snapshot.parameters.height)),\n y: Math.round(t * Math.max(snapshot.parameters.width, snapshot.parameters.height))\n };\n return this.loader.loadVRCubePick(snapshot, pos, face);\n }\n hotspots() {\n var _a, _b;\n const result = [];\n if (this.hotspotsList.length === 0) {\n return [];\n }\n const hotspotCount = (_b = (_a = this.hotspotsList[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n const modelViewProjectionMatrix = m4.inverse(this.modelViewProjectionMatrix);\n for (let i = 0; i < hotspotCount; i++) {\n const faceIndex = this.hotspotsList.findIndex(hotspots => hotspots[i].visibility !== 'OutOfFrustum');\n if (faceIndex === -1) {\n continue;\n }\n const hotspot = Object.assign({}, this.hotspotsList[faceIndex][i]);\n const s = hotspot.position2D.x / this.images[0].width;\n const t = hotspot.position2D.y / this.images[0].height;\n let rx = 0;\n let ry = 0;\n let rz = 0;\n switch (faceIndex) {\n case 0:\n if (this.pov.target[2] < 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 2 * s - 1;\n ry = 1 - 2 * t;\n rz = 1;\n break;\n case 1:\n if (this.pov.target[0] < 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 1;\n ry = 1 - 2 * t;\n rz = 1 - 2 * s;\n break;\n case 2:\n if (this.pov.target[2] > 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 1 - 2 * s;\n ry = 1 - 2 * t;\n rz = 1;\n break;\n case 3:\n if (this.pov.target[0] > 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 1;\n ry = 1 - 2 * t;\n rz = 2 * s - 1;\n break;\n case 4:\n if (this.pov.target[1] < 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 2 * s - 1;\n ry = 1;\n rz = 2 * t - 1;\n break;\n case 5:\n if (this.pov.target[1] > 0) {\n hotspot.visibility = 'OutOfFrustum';\n }\n rx = 2 * s - 1;\n ry = 1;\n rz = 1 - 2 * t;\n break;\n }\n const point3D = v3.normalize([rx, ry, rz]);\n const point2D = m4.transformPoint(modelViewProjectionMatrix, point3D);\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const position2D = {\n x: width - 0.5 * width * (point2D[0] + 1),\n y: height - 0.5 * height * (point2D[1] + 1)\n };\n const canvasResolution = new Resolution(width, height);\n const visibility = Viewport.contains(canvasResolution, position2D) ? hotspot.visibility : 'OutOfFrustum';\n result.push(Object.assign(Object.assign({}, hotspot), { position2D, visibility }));\n }\n return result;\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n get modelViewProjectionMatrix() {\n const width = this.canvas.element.clientWidth;\n const height = this.canvas.element.clientHeight;\n const aspect = width > height ? width / height : height / width;\n const standardAspectRatio = Viewport.getStandardAspectRatio(width, height);\n const fov = this.interaction.fov * (standardAspectRatio / aspect);\n const projectionMatrix = width > height ? Maths.perspectiveWithFovY(fov, width / height, 0.5, 100) : Maths.perspectiveWithFovX(fov, width / height, 0.5, 100);\n const projectionMatrixInverse = m4.inverse(projectionMatrix);\n const pov = this.interaction.orientedPov;\n const viewMatrixInverse = m4.lookAt(pov.eye, pov.target, pov.up);\n return m4.multiply(viewMatrixInverse, projectionMatrixInverse);\n }\n render() {\n this.gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n this.uniforms.u_matrix = this.modelViewProjectionMatrix;\n this.gl.useProgram(this.programInfo.program);\n twgl.setBuffersAndAttributes(this.gl, this.programInfo, this.quad);\n twgl.setUniforms(this.programInfo, this.uniforms);\n twgl.drawBufferInfo(this.gl, this.quad);\n if (this.uniforms.u_mix < 1.0) {\n this.uniforms.u_mix = Math.min(this.uniforms.u_mix + 0.05, 1.0);\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n }\n onMouseDown(e) {\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\n width: this.gl.canvas.width,\n height: this.gl.canvas.height\n });\n }\n onMouseMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\n e.preventDefault();\n }\n onMouseUp(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\n }\n onMouseEnter(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n if (e.buttons === 0) {\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\n }\n }\n onTouchStart(e) {\n this.container.classList.add('ls-viewer-container-vrcube-grabbing');\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\n width: this.gl.canvas.width,\n height: this.gl.canvas.height\n });\n }\n onTouchMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\n e.preventDefault();\n }\n onTouchEnd(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrcube-grabbing');\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\n }\n onDeviceOrientation(e) {\n this.interaction.orientation(e.alpha, e.beta, e.gamma);\n }\n}\n","import regression from 'regression';\nimport { Inertia } from './Inertia';\nimport { Maths } from './Maths';\nimport { Point } from './Point';\nexport class InteractivePosition {\n constructor(position, frames, rows, loop, onMotion) {\n this.isStarted = false;\n this.position = position;\n this.frames = frames;\n this.rows = rows;\n this.loop = loop;\n this.onMotion = onMotion;\n this.inertia = new Inertia(this.motion.bind(this));\n this.initPosition = this.position;\n this.startPosition = { x: 0.0, y: 0.0 };\n this.startPoint = new Point(0.0, 0.0);\n this.startSize = { width: 0.0, height: 0.0 };\n this.lastPoints = [];\n this.lastPointsNumber = 20;\n }\n destroy() {\n this.inertia.destroy();\n }\n reset() {\n this.position = this.initPosition;\n }\n get positionIndex() {\n return this.frames * this.position.y + this.position.x;\n }\n set positionIndex(index) {\n if (this.positionIndex === index) {\n return;\n }\n const positionIndex = this.loop ? Maths.mod(index, this.frames * this.rows) : Math.max(0, Math.min(index, this.frames * this.rows));\n this.position.x = Maths.mod(positionIndex, this.frames);\n this.position.y = Math.floor(positionIndex / this.frames);\n }\n start(point, size) {\n this.isStarted = true;\n this.startPosition = Object.assign({}, this.position);\n this.startPoint = point;\n this.startSize = size;\n this.lastPoints = [];\n this.inertia.stop();\n }\n motion(point) {\n if (this.isStarted) {\n this.inertia.track(point);\n }\n this.lastPoints.push({ x: point.x, y: point.y });\n this.lastPoints.splice(0, this.lastPoints.length - this.lastPointsNumber);\n const regressionResult = regression.linear(this.lastPoints.map(p => [p.x, p.y]));\n const minDistance = 25;\n if (Math.abs(regressionResult.equation[0]) < 1) {\n const dx = (Maths.accelerate(point.x - this.startPoint.x, 1.3) / this.startSize.width) * (this.frames / 4);\n let positionX = this.startPosition.x - Math.round(dx);\n positionX = this.loop ? Maths.mod(positionX, this.frames) : Math.max(0, Math.min(positionX, this.frames - 1));\n if (positionX !== this.position.x) {\n this.position.x = positionX;\n this.onMotion();\n }\n const minX = Math.min(...this.lastPoints.map(p => p.x));\n const maxX = Math.max(...this.lastPoints.map(p => p.x));\n if (maxX - minX > minDistance) {\n this.startPoint.y = point.y;\n this.startPosition.y = this.position.y;\n }\n }\n else {\n const dy = (Maths.accelerate(point.y - this.startPoint.y, 1.7) / this.startSize.height) * (this.rows / 4);\n let positionY = this.startPosition.y + Math.round(dy);\n positionY = Math.max(0, Math.min(positionY, this.rows - 1));\n if (positionY !== this.position.y) {\n this.position.y = positionY;\n this.onMotion();\n }\n const minY = Math.min(...this.lastPoints.map(p => p.y));\n const maxY = Math.max(...this.lastPoints.map(p => p.y));\n if (maxY - minY > minDistance) {\n this.startPoint.x = point.x;\n this.startPosition.x = this.position.x;\n }\n }\n }\n end(point, inertia) {\n this.isStarted = false;\n if (inertia) {\n this.inertia.track(point);\n this.inertia.start();\n }\n }\n}\n","import { EventHelper } from './EventHelper';\nimport { InteractivePosition } from './InteractivePosition';\nimport { Resolution } from './Resolution';\nimport { Viewport } from './Viewport';\nexport class WidgetVRObject {\n constructor(container, canvas, loader, onInteraction) {\n this.container = container;\n this.canvas = canvas;\n this.loader = loader;\n this.images = [];\n this.frames = 24;\n this.hotspotsList = [[]];\n this.interaction = new InteractivePosition({ x: 0, y: 0 }, 1, 1, false, () => {\n this.canvas.draw(this.image, true, 0.5);\n this.onInteraction({\n position: this.interaction.positionIndex\n });\n });\n this.onInteraction = onInteraction;\n }\n destroy() {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n show() {\n this.canvas.show(false);\n this.container.classList.add('ls-viewer-container-vrobject');\n }\n hide() {\n this.canvas.hide(false);\n this.container.classList.remove('ls-viewer-container-vrobject');\n }\n async goto(position) {\n return new Promise(resolve => {\n let pos = this.interaction.positionIndex;\n const goToLoop = () => {\n if (this.interaction.positionIndex === position) {\n resolve();\n }\n else {\n let sign = pos > position ? -1 : 1;\n if (this.interaction.loop) {\n if (this.interaction.frames - pos + position < Math.abs(position - pos)) {\n sign *= -1;\n }\n }\n pos += 0.5 * sign;\n this.position = Math.floor(pos);\n this.animationFrameId = requestAnimationFrame(goToLoop);\n }\n };\n this.animationFrameId = requestAnimationFrame(goToLoop);\n });\n }\n get position() {\n return this.interaction.positionIndex;\n }\n set position(position) {\n this.interaction.positionIndex = position;\n this.canvas.draw(this.image, true, 0.5);\n }\n get image() {\n return this.images[this.interaction.positionIndex];\n }\n async load(snapshot, hotspots, reset, fade) {\n let promise = Promise.resolve();\n if (reset) {\n this.interaction.reset();\n }\n const snapshotHash = JSON.stringify(snapshot);\n if (snapshotHash === this.snapshotHash && this.image) {\n promise = promise.then(() => this.canvas.draw(this.image, fade, 0.05));\n }\n else {\n this.images = [];\n promise = promise.then(() => this.loader.loadVRObjectSnapshot(snapshot, this.interaction.positionIndex).then(promises => {\n const frames = promises.length;\n this.images = new Array(frames);\n this.interaction.frames = snapshot.view.frames || this.frames;\n this.interaction.rows = frames / this.interaction.frames;\n this.interaction.loop = !!snapshot.view.loop;\n if (reset) {\n this.interaction.reset();\n }\n promises.forEach((promise, i) => {\n promise\n .then(img => {\n this.images[i] = img;\n if (img === this.image) {\n this.canvas.draw(this.image, fade, 0.05);\n }\n })\n .catch(() => { });\n });\n return promises[this.interaction.positionIndex].then(() => Promise.resolve());\n }));\n }\n const hotspotsHash = JSON.stringify(hotspots);\n if (snapshotHash !== this.snapshotHash || hotspotsHash !== this.hotspotsHash) {\n if (hotspots.length) {\n promise = promise.then(() => this.loader.loadVRObjectHotspots(snapshot, hotspots).then(hotspots => {\n this.hotspotsList = hotspots;\n }));\n }\n else {\n this.hotspotsList = [[]];\n }\n }\n this.hotspotsHash = hotspotsHash;\n this.snapshotHash = snapshotHash;\n return promise;\n }\n async pick(snapshot, position) {\n const resolution = new Resolution(snapshot.parameters.width, snapshot.parameters.height);\n const unprojectedPosition = Viewport.unproject(resolution, this.canvas.resolution, this.canvas.fit, position);\n return this.loader.loadVRObjectPick(snapshot, unprojectedPosition, this.position, this.frames);\n }\n hotspots(resolution) {\n const hotspots = this.hotspotsList[this.interaction.positionIndex] || [];\n return hotspots\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { position2D: Viewport.project(resolution, this.canvas.resolution, this.canvas.fit, hotspot.position2D) })))\n .map(hotspot => (Object.assign(Object.assign({}, hotspot), { visibility: Viewport.contains(this.canvas.resolution, hotspot.position2D) ? hotspot.visibility : 'OutOfFrustum' })));\n }\n snapshot(type, quality) {\n return this.canvas.element.toDataURL(type, quality);\n }\n onMouseDown(e) {\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\n this.interaction.start(EventHelper.pointFromMouseEvent(e), {\n width: this.canvas.element.width,\n height: this.canvas.element.height\n });\n }\n onMouseMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromMouseEvent(e));\n e.preventDefault();\n }\n onMouseUp(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), true);\n }\n onMouseEnter(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n if (e.buttons === 0) {\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromMouseEvent(e), false);\n }\n }\n onTouchStart(e) {\n this.container.classList.add('ls-viewer-container-vrobject-grabbing');\n this.interaction.start(EventHelper.pointFromTouchEvent(e), {\n width: this.canvas.element.width,\n height: this.canvas.element.height\n });\n }\n onTouchMove(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.interaction.motion(EventHelper.pointFromTouchEvent(e));\n e.preventDefault();\n }\n onTouchEnd(e) {\n if (!this.interaction.isStarted) {\n return;\n }\n this.container.classList.remove('ls-viewer-container-vrobject-grabbing');\n this.interaction.end(EventHelper.pointFromTouchEvent(e), true);\n }\n onDeviceOrientation(e) { }\n}\n","export var WRAPIv2;\n(function (WRAPIv2) {\n let SunShadowQualityMode;\n (function (SunShadowQualityMode) {\n SunShadowQualityMode[\"VeryLow\"] = \"veryLow\";\n SunShadowQualityMode[\"Low\"] = \"low\";\n SunShadowQualityMode[\"Medium\"] = \"medium\";\n SunShadowQualityMode[\"Fine\"] = \"fine\";\n SunShadowQualityMode[\"Ultra\"] = \"ultra\";\n })(SunShadowQualityMode = WRAPIv2.SunShadowQualityMode || (WRAPIv2.SunShadowQualityMode = {}));\n let SunShadowSmoothnessMode;\n (function (SunShadowSmoothnessMode) {\n SunShadowSmoothnessMode[\"None\"] = \"none\";\n SunShadowSmoothnessMode[\"Weak\"] = \"weak\";\n SunShadowSmoothnessMode[\"Normal\"] = \"normal\";\n SunShadowSmoothnessMode[\"Fine\"] = \"fine\";\n SunShadowSmoothnessMode[\"UltraFine\"] = \"ultraFine\";\n SunShadowSmoothnessMode[\"Max\"] = \"max\";\n })(SunShadowSmoothnessMode = WRAPIv2.SunShadowSmoothnessMode || (WRAPIv2.SunShadowSmoothnessMode = {}));\n let SunUseCaseMode;\n (function (SunUseCaseMode) {\n SunUseCaseMode[\"Manual\"] = \"manual\";\n SunUseCaseMode[\"ExtractedFromEnv\"] = \"extractedFromEnv\";\n })(SunUseCaseMode = WRAPIv2.SunUseCaseMode || (WRAPIv2.SunUseCaseMode = {}));\n})(WRAPIv2 || (WRAPIv2 = {}));\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import debounce from 'debounce-promise';\nimport { Canvas2D } from './Canvas2D';\nimport { Canvas3D } from './Canvas3D';\nimport { Loader } from './Loader';\nimport { Resolution } from './Resolution';\nimport { Video } from './Video';\nimport { Viewport } from './Viewport';\nimport { WidgetImage } from './WidgetImage';\nimport { WidgetVideo } from './WidgetVideo';\nimport { WidgetVRCube } from './WidgetVRCube';\nimport { WidgetVRObject } from './WidgetVRObject';\nimport './index.css';\nexport class Viewer {\n constructor(container, options) {\n this.checkResize = this.checkResize.bind(this);\n this.onDeviceOrientation = this.onDeviceOrientation.bind(this);\n this.onResize = this.onResize.bind(this);\n this.onMouseDown = this.onMouseDown.bind(this);\n this.onMouseMove = this.onMouseMove.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onTouchStart = this.onTouchStart.bind(this);\n this.onTouchMove = this.onTouchMove.bind(this);\n this.onTouchEnd = this.onTouchEnd.bind(this);\n this.onLoadStart = this.onLoadStart.bind(this);\n this.onLoadProgress = this.onLoadProgress.bind(this);\n this.onLoadEnd = this.onLoadEnd.bind(this);\n this.onLoadError = this.onLoadError.bind(this);\n this.onHotspotsChange = this.onHotspotsChange.bind(this);\n this.onVrcubeInteraction = this.onVrcubeInteraction.bind(this);\n this.onVrobjectInteraction = this.onVrobjectInteraction.bind(this);\n this.options = Object.assign({ server: 'localhost', api: 'v1', fit: 'cover', image: {}, video: {}, vrcube: {}, vrobject: {}, events: {} }, options);\n this.options.events = Object.assign({ onLoadStart: () => { }, onLoadProgress: () => { }, onLoadEnd: () => { }, onLoadError: () => { }, onInteraction: () => { }, onVrcubeInteraction: () => { }, onVrobjectInteraction: () => { }, onHotspotsChange: () => { } }, options.events);\n this.options.events.onLoadError = debounce(this.options.events.onLoadError, 10);\n this.container = container;\n this.container.classList.add('ls-viewer-container');\n this.containerWidth = 0;\n this.containerHeight = 0;\n this.canvas2D = new Canvas2D(this.options.fit);\n this.container.appendChild(this.canvas2D.element);\n this.canvas3D = new Canvas3D();\n this.container.appendChild(this.canvas3D.element);\n this.video = new Video();\n this.container.appendChild(this.video.element);\n this.loader = new Loader(this.options.server, this.options.api, this);\n this.resolution = new Resolution(0, 0);\n this.parameters = {\n width: 0,\n height: 0,\n antialiasing: false,\n superSampling: 2\n };\n this.encoder = {\n format: 'jpeg',\n quality: 80\n };\n this.hotspots = [];\n this.widgetImage = new WidgetImage(container, this.canvas2D, this.loader);\n this.widgetVideo = new WidgetVideo(container, this.video, this.loader);\n this.widgetVRObject = new WidgetVRObject(container, this.canvas2D, this.loader, this.onVrobjectInteraction);\n if (this.canvas3D.context) {\n this.widgetVRCube = new WidgetVRCube(container, this.canvas3D, this.loader, this.onVrcubeInteraction);\n }\n this.widget = this.widgetImage;\n this.isDestroyed = false;\n this.container.addEventListener('mousedown', this.onMouseDown);\n this.container.addEventListener('mouseenter', this.onMouseEnter);\n this.container.addEventListener('touchstart', this.onTouchStart);\n document.addEventListener('mousemove', this.onMouseMove, { passive: false });\n document.addEventListener('mouseup', this.onMouseUp);\n document.addEventListener('touchmove', this.onTouchMove, { passive: false });\n document.addEventListener('touchend', this.onTouchEnd);\n this.loadWidget = debounce(this.loadWidget, 10);\n this.onResize = debounce(this.onResize, 250);\n requestAnimationFrame(this.checkResize);\n }\n destroy() {\n this.canvas2D.destroy();\n this.container.removeEventListener('mousedown', this.onMouseDown);\n this.container.removeEventListener('mouseenter', this.onMouseEnter);\n this.container.removeEventListener('touchstart', this.onTouchStart);\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n document.removeEventListener('touchmove', this.onTouchMove);\n document.removeEventListener('touchend', this.onTouchEnd);\n this.isDestroyed = true;\n }\n async load(scene, transition) {\n let promise = Promise.resolve();\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.loadAnimation(transition.animation));\n }\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\n const mode = this.view.mode;\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\n }\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.widgetVideo.play());\n }\n promise = promise.then(() => {\n this.scene = Array.isArray(scene) ? [...scene] : [scene];\n return this.loadWidget(false, !(transition && transition.animation));\n });\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n async setEncoder(encoder) {\n this.encoder = Object.assign({}, encoder);\n let promise = Promise.resolve();\n promise = promise.then(() => this.loadWidget(false, true));\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n setParameters(parameters) {\n this.parameters = Object.assign({}, parameters);\n this.parameters.width = this.resolution.width;\n this.parameters.height = this.resolution.height;\n let promise = Promise.resolve();\n promise = promise.then(() => this.loadWidget(false, true));\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n setHotspots(hotspots) {\n this.hotspots = hotspots;\n this.loadWidget(false, false);\n }\n async setView(view, transition) {\n let promise = Promise.resolve();\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.loadAnimation(transition.animation));\n }\n if (this.view && (transition === null || transition === void 0 ? void 0 : transition.fromPosition) !== undefined && this.viewWidget instanceof WidgetVRObject) {\n promise = promise.then(() => this.viewWidget.goto(transition.fromPosition));\n }\n if (transition === null || transition === void 0 ? void 0 : transition.animation) {\n promise = promise.then(() => this.widgetVideo.play());\n }\n promise = promise.then(() => {\n let reset = true;\n this.view = Object.assign({}, view);\n if (this.view && this.viewWidget instanceof WidgetVRObject && (transition === null || transition === void 0 ? void 0 : transition.toPosition) !== undefined) {\n reset = false;\n this.viewWidget.position = transition.toPosition;\n }\n return this.loadWidget(reset, !(transition && transition.animation));\n });\n promise.catch(e => {\n this.onLoadError(e);\n });\n return promise;\n }\n setVrcube(data) {\n if (!this.widgetVRCube) {\n return;\n }\n Object.assign(this.widgetVRCube, data);\n }\n setVrobject(data) {\n Object.assign(this.widgetVRObject, data);\n }\n async loadAnimation(animation) {\n var _a;\n const snapshot = {\n scene: this.scene,\n view: {\n animation: animation.name,\n camera: animation.camera,\n duration: animation.duration,\n loop: animation.loop,\n reverse: animation.reverse\n },\n parameters: this.parameters,\n encoder: {\n format: 'mp4'\n }\n };\n if (!((_a = snapshot.view) === null || _a === void 0 ? void 0 : _a.background)) {\n snapshot.view.background = 'product';\n }\n return this.widgetVideo.load(snapshot).then(() => Promise.resolve());\n }\n async playAnimation(animation) {\n return this.loadAnimation(animation)\n .then(() => this.widgetVideo.play())\n .catch(e => {\n this.onLoadError(e);\n });\n }\n stopAnimation() {\n this.widgetVideo.hide();\n }\n async pick(position) {\n if (!this.scene) {\n throw new Error('No scene set');\n }\n if (!this.view) {\n throw new Error('No view set');\n }\n if (!this.view.camera && !this.view.cameraGroup) {\n throw new Error('No camera set');\n }\n const snapshot = {\n scene: this.scene,\n view: this.view,\n parameters: this.parameters,\n encoder: this.encoder\n };\n return await this.viewWidget.pick(snapshot, position);\n }\n snapshot(type, quality) {\n return this.viewWidget.snapshot(type, quality);\n }\n async loadWidget(reset, fade) {\n if (!this.scene || !this.view) {\n return Promise.resolve();\n }\n if (!this.parameters.width || !this.parameters.height) {\n return Promise.resolve();\n }\n const widget = this.viewWidget;\n if (!widget) {\n return Promise.reject(new Error('Unknown view mode'));\n }\n const snapshot = {\n scene: this.scene,\n view: this.view,\n parameters: this.parameters,\n encoder: this.encoder\n };\n if (!snapshot.view.background) {\n snapshot.view.background = 'product';\n }\n return widget.load(snapshot, this.hotspots, reset, fade).then(() => {\n this.widget.hide();\n this.widget = widget;\n this.widget.show();\n this.widgetVideo.hide();\n this.onHotspotsChange();\n });\n }\n get viewWidget() {\n var _a, _b;\n switch ((_a = this.view) === null || _a === void 0 ? void 0 : _a.mode) {\n case 'image':\n return this.widgetImage;\n case 'video':\n return this.widgetVideo;\n case 'vrcube':\n return (_b = this.widgetVRCube) !== null && _b !== void 0 ? _b : this.widgetImage;\n case 'vrobject':\n return this.widgetVRObject;\n default:\n return this.widgetImage;\n }\n }\n checkResize() {\n if (this.isDestroyed) {\n return;\n }\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n if (width !== this.containerWidth || height !== this.containerHeight) {\n this.containerWidth = width;\n this.containerHeight = height;\n this.onResize();\n }\n if (!this.isDestroyed) {\n requestAnimationFrame(this.checkResize);\n }\n }\n onMouseDown(e) {\n this.widget.onMouseDown(e);\n }\n onMouseEnter(e) {\n this.widget.onMouseEnter(e);\n }\n onMouseMove(e) {\n this.widget.onMouseMove(e);\n }\n onMouseUp(e) {\n this.widget.onMouseUp(e);\n }\n onTouchStart(e) {\n this.widget.onTouchStart(e);\n }\n onTouchMove(e) {\n this.widget.onTouchMove(e);\n }\n onTouchEnd(e) {\n this.widget.onTouchEnd(e);\n }\n onDeviceOrientation(e) {\n this.widget.onDeviceOrientation(e);\n }\n onResize() {\n const width = this.container.clientWidth;\n const height = this.container.clientHeight;\n this.resolution = Viewport.getStandardResolution(width * window.devicePixelRatio, height * window.devicePixelRatio);\n this.parameters.width = this.resolution.width;\n this.parameters.height = this.resolution.height;\n this.canvas2D.resize(width, height, window.devicePixelRatio);\n this.canvas3D.resize(width, height, window.devicePixelRatio);\n this.video.resize(width, height, this.resolution, this.options.fit);\n this.loadWidget(false, false)\n .then(() => {\n this.onHotspotsChange();\n })\n .catch(e => {\n this.onLoadError(e);\n });\n }\n onVrcubeInteraction(...args) {\n this.onHotspotsChange();\n this.options.events.onInteraction(...args);\n this.options.events.onVrcubeInteraction(...args);\n }\n onVrobjectInteraction(args) {\n this.onHotspotsChange();\n this.options.events.onInteraction(args.position);\n this.options.events.onVrobjectInteraction(args.position);\n }\n onHotspotsChange() {\n const hotspots = this.widget.hotspots(this.resolution);\n if (hotspots.length)\n this.options.events.onHotspotsChange(hotspots);\n }\n onLoadStart(...args) {\n this.container.classList.add('ls-viewer-container-loading');\n this.options.events.onLoadStart(...args);\n }\n onLoadProgress(...args) {\n this.options.events.onLoadProgress(...args);\n }\n onLoadEnd(...args) {\n this.container.classList.remove('ls-viewer-container-loading');\n this.options.events.onLoadEnd(...args);\n }\n onLoadError(...args) {\n this.container.classList.remove('ls-viewer-container-loading');\n this.options.events.onLoadError(...args);\n }\n}\n"],"names":["Resolution","constructor","width","height","this","aspect","Viewport","top","left","contains","resolution","position","x","y","fit","viewportResolution","aspectRatio","viewportRatio","project","viewport","scaleX","scaleY","Math","round","unproject","getStandardAspectRatio","abs","getStandardResolution","quality","getStandardQuality","max","Canvas2D","element","document","createElement","classList","add","style","opacity","context","getContext","backCanvas","backContext","pixelRatio","destroy","requestAnimationId","cancelAnimationFrame","undefined","show","useDisplay","display","hide","resize","draw","img","fade","speed","drawImage","globalAlpha","fadeLoop","image","alpha","min","clearRect","requestAnimationFrame","Canvas3D","twgl","preserveDrawingBuffer","setDefaultTextureColor","Maths","accelerate","v","f","factor","clamp","degreesToRadians","a","PI","radiansToDegrees","mod","floor","perspectiveWithFovX","fovX","near","far","dst","right","tan","perspectiveWithLeft","perspectiveWithFovY","fovY","bottom","ral","rsl","tab","tsb","fsn","Float32Array","PointOfView","initCubeFace","eye","target","face","up","v3","subtract","c","mulScalar","length","b","normalize","cross","copy","viewVector","rightVector","viewMatrix","m4","inverse","lookAt","clone","default","Spherical","pov","view","dot","z","longitude","atan2","latitude","sqrt","distance","vector","x1","cos","y1","sin","pointOfView","alphaMatrix","rotationY","betaMatrix","rotationX","rollMatrix","rotationZ","m","multiply","transformPoint","WebRenderStatic","animation","snapshot","scene","database","databaseId","Error","video","vrCube","vrObject","Database","xmlDoc","id","_a","getElementsByTagName","getAttribute","getCameraId","cameraName","cameraGroup","_b","querySelector","getCameraById","cameraId","groupId","mapElementToCamera","getCameraByName","groupName","getCameraGroupId","getCameraGroupById","mapElementToCameraGroup","getCameraGroupByName","name","parseFloat","cameras","querySelectorAll","map","el","WebRenderV1","server","buildQuery","request","Object","entries","filter","k","join","sceneParameters","accessory","find","p","decor","product","configuration","animations","accessoryDatabaseId","decorDatabaseId","decorDeltaAltitude","translation","renderParameters","parameters","background","softwareAntialiasing","antialiasing","superSampling","encoderParameters","encoder","imageFormat","format","imageQuality","fetch","url","then","response","text","responseText","matches","replace","match","xmlRegex","Promise","reject","assign","bookmarkSet","camera","split","bookmark","frames","loop","queryString","DOMParser","parseFromString","resolve","duration","reverse","SuppressedError","WebRenderV2","pResult","s","e","t","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","propertyIsEnumerable","__rest","toString","jpeg","png","compression","webp","fetchFrame","body","method","JSON","stringify","json","data","fetchFrameArray","fetchHotspots","fetchHotspotsArray","fetchPick","mode","images","panFrames","panFrom","panTo","panLoop","tiltFrames","tiltFrom","tiltTo","tiltLoop","fps","imageHotspots","hotspots","hotspotsBody","imagePick","positions","vrCubeHotspots","vrObjectHotspots","every","hotspot","tags","Loader","api","delegate","webrender","webrenderV2","loadingId","loaded","total","databases","onLoadStart","onLoadProgress","onLoadEnd","progress","loadImageSnapshot","src","loadImage","loadVideoSnapshot","loadVideo","loadVRCubeSnapshot","srcs","promises","all","imgs","loadVRObjectSnapshot","loadVideoFrames","loadImageFrames","Image","crossOrigin","location","protocol","isValidHttpUrl","promise","addEventListener","once","type","Array","start","n","step","ceil","index","catch","load","loadVideoFrame","count","seeked","removeEventListener","canvas","videoWidth","videoHeight","toDataURL","currentTime","loadImageHotspots","convert","loadVRCubeHotspots","loadVRObjectHotspots","loadImagePick","loadVRObjectPick","vrObjectFrameSnapshot","loadVRCubePick","vrCubeFrameSnapshot","db","push","values","cameraGroupId","spherical","lens","fov","str","URL","_","Video","setAttribute","WidgetImage","container","loader","hotspotList","remove","reset","snapshotHash","hotspotsHash","pick","unprojectedPosition","position2D","visibility","onMouseDown","onMouseMove","onMouseUp","onMouseEnter","onTouchStart","onTouchMove","onTouchEnd","onDeviceOrientation","WidgetVideo","hash","play","Point","EventHelper","pointFromMouseEvent","screenX","screenY","pointFromTouchEvent","touch","targetTouches","changedTouches","Basis3","args","u","o","w","localToGlobalMatrix","globalToLocalMatrix","InertiaPoint","time","Inertia","onMotion","points","lastPoint","velocity","bind","animationFrameId","track","point","Date","now","firstPoint","dx","dy","dt","stop","InteractiveCamera","isStarted","orientationMatrix","identity","inertia","motion","initPov","initFov","initOrientation","window","orientation","startPov","startSize","previousPoint","orientedPov","headBasis","matrix","transformDirection","size","delta","rotationMatrix","headMatrix","end","beta","gamma","alphaRadians","betaRadians","gammaRadians","rotateZ","rotateX","rotateY","WidgetVRCube","onInteraction","hotspotsList","interaction","render","gl","programInfo","createProgramInfo","quad","primitives","createXYQuadBufferInfo","uniforms","u_matrix","u_mix","u_texture_back","createTexture","TEXTURE_CUBE_MAP","minMag","LINEAR","u_texture","LINEAR_MIPMAP_LINEAR","cubeFaceOrder","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","err","texture","clientWidth","clientHeight","point2D","point3D","modelViewProjectionMatrix","pos","result","hotspotCount","faceIndex","findIndex","rx","ry","rz","canvasResolution","standardAspectRatio","projectionMatrix","projectionMatrixInverse","viewMatrixInverse","useProgram","program","setBuffersAndAttributes","setUniforms","drawBufferInfo","preventDefault","buttons","InteractivePosition","rows","initPosition","startPosition","startPoint","lastPoints","lastPointsNumber","positionIndex","splice","regressionResult","regression","linear","equation","positionX","minX","positionY","minY","WidgetVRObject","goto","goToLoop","sign","forEach","WRAPIv2","SunShadowQualityMode","SunShadowSmoothnessMode","SunUseCaseMode","css","ref","insertAt","head","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","options","checkResize","onResize","onLoadError","onHotspotsChange","onVrcubeInteraction","onVrobjectInteraction","vrcube","vrobject","events","debounce","containerWidth","containerHeight","canvas2D","canvas3D","widgetImage","widgetVideo","widgetVRObject","widgetVRCube","widget","isDestroyed","passive","loadWidget","transition","loadAnimation","fromPosition","viewWidget","isArray","setEncoder","setParameters","setHotspots","setView","toPosition","setVrcube","setVrobject","playAnimation","stopAnimation","devicePixelRatio"],"mappings":"mhBAAO,MAAMA,EACT,WAAAC,CAAYC,EAAOC,GACfC,KAAKF,MAAQA,EACbE,KAAKD,OAASA,CACjB,CACD,UAAIE,GACA,OAAOD,KAAKF,MAAQE,KAAKD,MAC5B,ECNE,MAAMG,EACT,WAAAL,CAAYM,EAAKC,EAAMN,EAAOC,GAC1BC,KAAKG,IAAMA,EACXH,KAAKI,KAAOA,EACZJ,KAAKF,MAAQA,EACbE,KAAKD,OAASA,CACjB,CACD,eAAOM,CAASC,EAAYC,GACxB,OAAOA,EAASC,GAAK,GAAKD,EAASC,EAAIF,EAAWR,OAASS,EAASE,GAAK,GAAKF,EAASE,EAAIH,EAAWP,MACzG,CACD,UAAOW,CAAIJ,EAAYK,EAAoBD,GACvC,MAAME,EAAcN,EAAWL,OACzBY,EAAgBF,EAAmBV,OACzC,IAAIH,EAAQ,EACRC,EAAS,EACb,OAAQW,GACJ,IAAK,UACDZ,EAAQe,EAAgBD,EAAcD,EAAmBb,MAAQa,EAAmBZ,OAASa,EAC7Fb,EAASc,EAAgBD,EAAcD,EAAmBb,MAAQc,EAAcD,EAAmBZ,OACnG,MACJ,IAAK,QACL,QACID,EAAQe,EAAgBD,EAAcD,EAAmBZ,OAASa,EAAcD,EAAmBb,MACnGC,EAASc,EAAgBD,EAAcD,EAAmBZ,OAASY,EAAmBb,MAAQc,EAC9F,MACJ,IAAK,OACDd,EAAQa,EAAmBb,MAC3BC,EAASY,EAAmBZ,OAGpC,MAAMI,GAAOQ,EAAmBZ,OAASA,GAAU,EAC7CK,GAAQO,EAAmBb,MAAQA,GAAS,EAClD,OAAO,IAAII,EAASC,EAAKC,EAAMN,EAAOC,EACzC,CACD,cAAOe,CAAQR,EAAYK,EAAoBD,EAAKH,GAChD,MAAMQ,EAAWb,EAASQ,IAAIJ,EAAYK,EAAoBD,GACxDM,EAASD,EAASjB,MAAQQ,EAAWR,MACrCmB,EAASF,EAAShB,OAASO,EAAWP,OAC5C,MAAO,CACHS,EAAGU,KAAKC,MAAMJ,EAASX,KAAOG,EAASC,EAAIQ,GAC3CP,EAAGS,KAAKC,MAAMJ,EAASZ,IAAMI,EAASE,EAAIQ,GAEjD,CACD,gBAAOG,CAAUd,EAAYK,EAAoBD,EAAKH,GAClD,MAAMQ,EAAWb,EAASQ,IAAIJ,EAAYK,EAAoBD,GACxDM,EAASD,EAASjB,MAAQQ,EAAWR,MACrCmB,EAASF,EAAShB,OAASO,EAAWP,OAC5C,MAAO,CACHS,EAAGU,KAAKC,OAAOZ,EAASC,EAAIO,EAASX,MAAQY,GAC7CP,EAAGS,KAAKC,OAAOZ,EAASE,EAAIM,EAASZ,KAAOc,GAEnD,CACD,6BAAOI,CAAuBvB,EAAOC,GACjC,GAAc,IAAVD,GAA0B,IAAXC,EACf,OAAO,EAEX,MAAMa,EAAcd,EAAQC,EAC5B,GAAID,EAAQC,EAAQ,CAGhB,OAFqBmB,KAAKI,IAAI,EAAI,EAAIV,GAChBM,KAAKI,IAAI,EAAI,GAAKV,GACF,EAAI,EAAI,EAAI,EACrD,CAGD,OAFqBM,KAAKI,IAAI,EAAI,EAAIV,GAChBM,KAAKI,IAAI,GAAK,EAAIV,GACF,EAAI,EAAI,GAAK,CACtD,CACD,4BAAOW,CAAsBzB,EAAOC,GAChC,GAAc,IAAVD,GAA0B,IAAXC,EACf,OAAO,IAAIH,EAAW,EAAG,GAE7B,MAAMgB,EAAcV,EAASmB,uBAAuBvB,EAAOC,GAC3D,GAAID,EAAQC,EAAQ,CAChB,MAAMyB,EAAUtB,EAASuB,mBAAmBP,KAAKQ,IAAI3B,EAASa,EAAad,IAC3E,OAAO,IAAIF,EAAWsB,KAAKC,MAAMK,GAAUN,KAAKC,MAAMK,EAAUZ,GACnE,CACD,MAAMY,EAAUtB,EAASuB,mBAAmBP,KAAKQ,IAAI5B,EAAQc,EAAab,IAC1E,OAAO,IAAIH,EAAWsB,KAAKC,MAAMK,EAAUZ,GAAcM,KAAKC,MAAMK,GACvE,CACD,yBAAOC,CAAmB1B,GACtB,OAAIA,GAAU,IACH,IAEPA,GAAU,IACH,IAEPA,GAAU,IACH,IAEPA,GAAU,IACH,IAEJ,IACV,EC3FE,MAAM4B,EACT,WAAA9B,CAAYa,GACRV,KAAK4B,QAAUC,SAASC,cAAc,UACtC9B,KAAK4B,QAAQG,UAAUC,IAAI,oBAC3BhC,KAAK4B,QAAQK,MAAMC,QAAU,IAC7BlC,KAAK4B,QAAQ9B,MAAQ,EACrBE,KAAK4B,QAAQ7B,OAAS,EACtBC,KAAKmC,QAAUnC,KAAK4B,QAAQQ,WAAW,MACvCpC,KAAKqC,WAAaR,SAASC,cAAc,UACzC9B,KAAKsC,YAActC,KAAKqC,WAAWD,WAAW,MAC9CpC,KAAKU,IAAMA,EACXV,KAAKuC,WAAa,CACrB,CACD,OAAAC,GACQxC,KAAKyC,qBACLC,qBAAqB1C,KAAKyC,oBAC1BzC,KAAKyC,wBAAqBE,EAEjC,CACD,IAAAC,CAAKC,GACGA,EACA7C,KAAK4B,QAAQK,MAAMa,QAAU,QAG7B9C,KAAK4B,QAAQK,MAAMC,QAAU,GAEpC,CACD,IAAAa,CAAKF,GACGA,EACA7C,KAAK4B,QAAQK,MAAMa,QAAU,OAG7B9C,KAAK4B,QAAQK,MAAMC,QAAU,GAEpC,CACD,cAAI5B,GACA,OAAO,IAAIV,EAAWI,KAAK4B,QAAQ9B,MAAQE,KAAKuC,WAAYvC,KAAK4B,QAAQ7B,OAASC,KAAKuC,WAC1F,CACD,MAAAS,CAAOlD,EAAOC,EAAQwC,GAClBvC,KAAK4B,QAAQ9B,MAAQA,EAAQyC,EAC7BvC,KAAK4B,QAAQ7B,OAASA,EAASwC,EAC/BvC,KAAK4B,QAAQK,MAAMnC,MAAQ,GAAGA,MAC9BE,KAAK4B,QAAQK,MAAMlC,OAAS,GAAGA,MAC/BC,KAAKqC,WAAWvC,MAAQA,EAAQyC,EAChCvC,KAAKqC,WAAWtC,OAASA,EAASwC,EAClCvC,KAAKuC,WAAaA,CACrB,CACD,IAAAU,CAAKC,EAAKC,EAAMC,GACZ,IAAKF,EACD,OAEAlD,KAAKyC,qBACLC,qBAAqB1C,KAAKyC,oBAC1BzC,KAAKyC,wBAAqBE,GAE9B,MAAM5B,EAAWb,EAASQ,IAAI,IAAId,EAAWsD,EAAIpD,MAAOoD,EAAInD,QAAS,IAAIH,EAAWI,KAAK4B,QAAQ9B,MAAOE,KAAK4B,QAAQ7B,QAASC,KAAKU,KAC/HyC,GACAnD,KAAKsC,YAAYe,UAAUrD,KAAK4B,QAAS,EAAG,GAC5C5B,KAAKmC,QAAQmB,YAAc,EAC3BtD,KAAKuD,SAASL,EAAKE,GAAS,KAG5BpD,KAAKmC,QAAQmB,YAAc,EAC3BtD,KAAKmC,QAAQkB,UAAUH,EAAKnC,EAASX,KAAMW,EAASZ,IAAKY,EAASjB,MAAOiB,EAAShB,SAEtFC,KAAKwD,MAAQN,CAChB,CACD,QAAAK,CAASL,EAAKE,GACV,GAAIpD,KAAKmC,QAAQmB,aAAe,EAG5B,OAFAZ,qBAAqB1C,KAAKyC,yBAC1BzC,KAAKyC,wBAAqBE,GAG9B,MAAMc,EAAQvC,KAAKwC,IAAI1D,KAAKmC,QAAQmB,YAAcF,EAAO,GACnDrC,EAAWb,EAASQ,IAAI,IAAId,EAAWsD,EAAIpD,MAAOoD,EAAInD,QAAS,IAAIH,EAAWI,KAAK4B,QAAQ9B,MAAOE,KAAK4B,QAAQ7B,QAASC,KAAKU,KACnIV,KAAKmC,QAAQwB,UAAU,EAAG,EAAG3D,KAAK4B,QAAQ9B,MAAOE,KAAK4B,QAAQ7B,QAC9DC,KAAKmC,QAAQmB,YAAc,EAC3BtD,KAAKmC,QAAQkB,UAAUrD,KAAKqC,WAAY,EAAG,GAC3CrC,KAAKmC,QAAQmB,YAAcG,EAC3BzD,KAAKmC,QAAQkB,UAAUH,EAAKnC,EAASX,KAAMW,EAASZ,IAAKY,EAASjB,MAAOiB,EAAShB,QAClFC,KAAKyC,mBAAqBmB,uBAAsB,KAC5C5D,KAAKuD,SAASL,EAAKE,EAAM,GAEhC,ECpFE,MAAMS,EACT,WAAAhE,GACIG,KAAK4B,QAAUC,SAASC,cAAc,UACtC9B,KAAK4B,QAAQG,UAAUC,IAAI,oBAC3BhC,KAAK4B,QAAQK,MAAMC,QAAU,IAC7BlC,KAAK4B,QAAQ9B,MAAQ,EACrBE,KAAK4B,QAAQ7B,OAAS,EACtBC,KAAKmC,QAAU2B,EAAK1B,WAAWpC,KAAK4B,QAAS,CAAEmC,uBAAuB,IACtED,EAAKE,uBAAuB,CAAC,EAAG,EAAG,EAAG,GACzC,CACD,IAAApB,GACI5C,KAAK4B,QAAQK,MAAMC,QAAU,GAChC,CACD,IAAAa,GACI/C,KAAK4B,QAAQK,MAAMC,QAAU,GAChC,CACD,MAAAc,CAAOlD,EAAOC,EAAQwC,GAClBvC,KAAK4B,QAAQ9B,MAAQA,EAAQyC,EAC7BvC,KAAK4B,QAAQ7B,OAASA,EAASwC,EAC/BvC,KAAK4B,QAAQK,MAAMnC,MAAQ,GAAGA,MAC9BE,KAAK4B,QAAQK,MAAMlC,OAAS,GAAGA,KAClC,ECtBE,MAAMkE,EACT,iBAAOC,CAAWC,EAAGC,GACjB,MAAMC,EAASD,GAAK,IACpB,OAAOlD,KAAKI,IAAI6C,IAAME,GAAUF,EAAI,EAAI,GAAK,EAChD,CACD,YAAOG,CAAMH,EAAGT,EAAKhC,GACjB,OAAOR,KAAKQ,IAAIR,KAAKwC,IAAIS,EAAGzC,GAAMgC,EACrC,CACD,uBAAOa,CAAiBC,GACpB,OAAOA,GAAKtD,KAAKuD,GAAK,IACzB,CACD,uBAAOC,CAAiBF,GACpB,OAAOA,GAAK,IAAMtD,KAAKuD,GAC1B,CACD,UAAOE,CAAInE,EAAGC,GACV,OAAOD,EAAIC,EAAIS,KAAK0D,MAAMpE,EAAIC,EACjC,CACD,0BAAOoE,CAAoBC,EAAM7E,EAAQ8E,EAAMC,EAAKC,GAChD,MAAMC,EAAQhE,KAAKiE,IAAIL,EAAO,GACxB3E,EAAM+E,EAAQjF,EACpB,OAAOD,KAAKoF,qBAAqBF,EAAOA,GAAQ/E,EAAKA,EAAK4E,EAAMC,EAAKC,EACxE,CACD,0BAAOI,CAAoBC,EAAMrF,EAAQ8E,EAAMC,EAAKC,GAChD,MAAM9E,EAAM4E,EAAO7D,KAAKiE,IAAIG,EAAO,GAC7BJ,EAAQ/E,EAAMF,EACpB,OAAOD,KAAKoF,qBAAqBF,EAAOA,GAAQ/E,EAAKA,EAAK4E,EAAMC,EAAKC,EACxE,CACD,0BAAOG,CAAoBhF,EAAM8E,EAAOK,EAAQpF,EAAK4E,EAAMC,EAAKC,GAE5D,MAAMO,EAAMN,EAAQ9E,EACdqF,EAAMP,EAAQ9E,EACdsF,EAAMvF,EAAMoF,EACZI,EAAMxF,EAAMoF,EACZK,EAAMZ,EAAMD,EAiBlB,OAtBAE,EAAMA,GAAO,IAAIY,aAAa,KAM1B,GAAM,EAAId,EAAQU,EACtBR,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAM,EAAIF,EAAQY,EACtBV,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKO,EAAMC,EACfR,EAAI,GAAKS,EAAMC,EACfV,EAAI,KAAOD,EAAMY,EACjBX,EAAI,KAAO,EACXA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,KAAQD,EAAMD,EAAQa,EAC1BX,EAAI,IAAM,EACHA,CACV,EClDE,MAAMa,EACT,mBAAOC,CAAaC,EAAKC,EAAQC,GAC7B,IAAIC,EAAK,CAAC,EAAG,EAAG,GAChB,MAAMhC,EAAIiC,EAAEA,GAACC,SAASJ,EAAQD,GACxBM,EAAIF,EAAAA,GAAGG,UAAU,CAAC,EAAG,EAAG,GAAIH,EAAEA,GAACI,OAAOrC,IACtCsC,EAAIL,EAAAA,GAAGG,UAAUH,EAAAA,GAAGM,UAAUN,EAAAA,GAAGO,MAAMxC,EAAGmC,IAAKF,EAAAA,GAAGI,OAAOrC,IACzDK,EAAI4B,EAAAA,GAAGG,UAAUH,EAAAA,GAAGM,UAAUN,EAAAA,GAAGO,MAAML,EAAGG,IAAKL,EAAAA,GAAGI,OAAOrC,IAC/D,OAAQ+B,GACJ,IAAK,QACDD,EAASG,EAAAA,GAAGpE,IAAIgE,EAAKxB,GACrB2B,EAAKC,EAAEA,GAACM,UAAUJ,GAClB,MACJ,IAAK,QACDL,EAASG,EAAAA,GAAGpE,IAAIgE,EAAKS,GACrBN,EAAKC,EAAEA,GAACM,UAAUJ,GAClB,MACJ,IAAK,OACDL,EAASG,EAAAA,GAAGC,SAASL,EAAKxB,GAC1B2B,EAAKC,EAAEA,GAACM,UAAUJ,GAClB,MACJ,IAAK,OACDL,EAASG,EAAAA,GAAGC,SAASL,EAAKS,GAC1BN,EAAKC,EAAEA,GAACM,UAAUJ,GAClB,MACJ,IAAK,KACDL,EAASG,EAAAA,GAAGpE,IAAIgE,EAAKM,GACrBH,EAAKC,EAAAA,GAAGM,UAAUN,EAAEA,GAACG,UAAU/B,GAAI,IACnC,MACJ,IAAK,OACDyB,EAASG,EAAAA,GAAGC,SAASL,EAAKM,GAC1BH,EAAKC,EAAEA,GAACM,UAAUlC,GAG1B,OAAO,IAAIsB,EAAYG,EAAQD,EAAKG,EACvC,CACD,WAAAtG,CAAYoG,EAAQD,EAAKG,GACrBnG,KAAKiG,OAASG,EAAAA,GAAGQ,KAAKX,GACtBjG,KAAKgG,IAAMI,EAAAA,GAAGQ,KAAKZ,GACnBhG,KAAKmG,GAAKC,EAAAA,GAAGQ,KAAKT,EACrB,CACD,cAAIU,GACA,OAAOT,EAAAA,GAAGC,SAASrG,KAAKiG,OAAQjG,KAAKgG,IACxC,CACD,eAAIc,GACA,OAAOV,EAAEA,GAACM,UAAUN,EAAAA,GAAGO,MAAM3G,KAAK6G,WAAY7G,KAAKmG,IACtD,CACD,cAAIY,GACA,OAAOC,KAAGC,QAAQD,EAAEA,GAACE,OAAOlH,KAAKgG,IAAKhG,KAAKiG,OAAQjG,KAAKmG,IAC3D,CACD,KAAAgB,GACI,OAAO,IAAIrB,EAAYM,EAAEA,GAACQ,KAAK5G,KAAKiG,QAASG,EAAEA,GAACQ,KAAK5G,KAAKgG,KAAMI,EAAEA,GAACQ,KAAK5G,KAAKmG,IAChF,EAELL,EAAYsB,QAAU,IAAItB,EAAY,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,ICpD5E,MAAMuB,EACT,WAAAxH,CAAYyH,GACRtH,KAAKiG,OAASqB,EAAIrB,OAClB,MAAMsB,EAAOnB,EAAAA,GAAGM,UAAUN,KAAGC,SAASiB,EAAItB,IAAKsB,EAAIrB,SAC7CzF,EAAI4F,EAAEA,GAACoB,IAAID,EAAM,CAAC,EAAG,EAAG,IACxB9G,EAAI2F,EAAEA,GAACoB,IAAID,EAAM,CAAC,EAAG,EAAG,IACxBE,EAAIrB,EAAEA,GAACoB,IAAID,EAAM,CAAC,EAAG,EAAG,IAC9BvH,KAAK0H,UAAYxG,KAAKyG,MAAMnH,EAAGiH,GAC/BzH,KAAK4H,SAAW1G,KAAKyG,MAAMlH,EAAGS,KAAK2G,KAAKrH,EAAIA,EAAIiH,EAAIA,IAChDrB,EAAEA,GAACoB,IAAIF,EAAInB,GAAI,CAAC,EAAG,EAAG,IAAM,IAC5BnG,KAAK0H,UAAYxG,KAAKuD,GAAKzE,KAAK0H,UAChC1H,KAAK4H,SAAW1G,KAAKuD,GAAKzE,KAAK4H,UAEnC5H,KAAK8H,SAAW1B,KAAGI,OAAOJ,EAAEA,GAACC,SAASiB,EAAIrB,OAAQqB,EAAItB,KACzD,CACD,UAAI+B,GACA,MAAMC,EAAK9G,KAAK+G,IAAIjI,KAAK4H,UAAY5H,KAAK8H,SACpCI,EAAKhH,KAAKiH,IAAInI,KAAK4H,UAAY5H,KAAK8H,SAG1C,MAAO,CAFI5G,KAAK+G,IAAIjI,KAAK0H,WAAaM,EAE1BE,EADDhH,KAAKiH,IAAInI,KAAK0H,WAAaM,EAEzC,CACD,WAAAI,CAAYnC,GACR,MAAMoC,EAAcrB,EAAEA,GAACsB,UAAUtI,KAAK0H,WAChCa,EAAavB,EAAAA,GAAGwB,WAAWxI,KAAK4H,UAChCa,EAAazB,EAAAA,GAAG0B,UAAU,GAC1BC,EAAI3B,KAAG4B,SAASP,EAAarB,EAAEA,GAAC4B,SAASL,EAAYE,IAC3D,IAAIlB,EAAO,CAAC,EAAK,GAAM,GACvBA,EAAOP,EAAAA,GAAG6B,eAAeF,EAAGpB,GAC5B,IAAIpB,EAAK,CAAC,EAAK,EAAK,GACpBA,EAAKa,EAAAA,GAAG6B,eAAeF,EAAGxC,GAC1B,MAAMH,EAAMI,EAAAA,GAAGC,SAASJ,EAAQG,EAAAA,GAAGG,UAAUgB,EAAMvH,KAAK8H,WACxD,OAAO,IAAIhC,EAAYG,EAAQD,EAAKG,EACvC,ECnCE,MAAM2C,EACT,WAAAjJ,GAAiB,CACjB,eAAMkJ,CAAUC,GACZ,OAAOA,EAASC,KACnB,CACD,cAAMC,CAASC,GACX,MAAM,IAAIC,MAAM,cACnB,CACD,WAAM5F,CAAMwF,GACR,OAAOA,EAASC,KACnB,CACD,WAAMI,CAAML,GACR,OAAOA,EAASC,KACnB,CACD,YAAMK,CAAON,GACT,OAAOA,EAASC,KACnB,CACD,cAAMM,CAASP,GACX,OAAOA,EAASC,KACnB,EClBE,MAAMO,EACT,WAAA3J,CAAY4J,GACRzJ,KAAKyJ,OAASA,CACjB,CACD,MAAIC,GACA,IAAIC,EACJ,OAAkE,QAA1DA,EAAK3J,KAAKyJ,OAAOG,qBAAqB,YAAY,UAAuB,IAAPD,OAAgB,EAASA,EAAGE,aAAa,KACtH,CACD,WAAAC,CAAYC,EAAYC,GACpB,IAAIL,EAAIM,EACR,OAAID,EACyH,QAAjHL,EAAK3J,KAAKyJ,OAAOS,cAAc,+BAA+BF,oBAA8BD,cAAoC,IAAPJ,OAAgB,EAASA,EAAGE,aAAa,MAG9E,QAApFI,EAAKjK,KAAKyJ,OAAOS,cAAc,gCAAgCH,cAAoC,IAAPE,OAAgB,EAASA,EAAGJ,aAAa,KAEpJ,CACD,aAAAM,CAAcC,EAAUC,GACpB,IAAIzI,EAOJ,OALIA,EADAwI,GAAYC,EACFrK,KAAKyJ,OAAOS,cAAc,6BAA6BG,kBAAwBD,OAG/EpK,KAAKyJ,OAAOS,cAAc,8BAA8BE,OAE/DxI,EAAU5B,KAAKsK,mBAAmB1I,GAAW,IACvD,CACD,eAAA2I,CAAgBR,EAAYS,GACxB,IAAI5I,EAOJ,OALIA,EADA4I,GAAaT,EACH/J,KAAKyJ,OAAOS,cAAc,+BAA+BM,oBAA4BT,OAGrF/J,KAAKyJ,OAAOS,cAAc,gCAAgCH,OAEjEnI,EAAU5B,KAAKsK,mBAAmB1I,GAAW,IACvD,CACD,gBAAA6I,CAAiBT,GACb,IAAIL,EACJ,OAA4F,QAApFA,EAAK3J,KAAKyJ,OAAOS,cAAc,+BAA+BF,cAAqC,IAAPL,OAAgB,EAASA,EAAGE,aAAa,KAChJ,CACD,kBAAAa,CAAmBhB,GACf,MAAM9H,EAAU5B,KAAKyJ,OAAOS,cAAc,6BAA6BR,OACvE,OAAO9H,EAAU5B,KAAK2K,wBAAwB/I,GAAW,IAC5D,CACD,oBAAAgJ,CAAqBC,GACjB,MAAMjJ,EAAU5B,KAAKyJ,OAAOS,cAAc,+BAA+BW,OACzE,OAAOjJ,EAAU5B,KAAK2K,wBAAwB/I,GAAW,IAC5D,CACD,kBAAA0I,CAAmB1I,GACf,MAAO,CACH8H,GAAI9H,EAAQiI,aAAa,MACzBgB,KAAMjJ,EAAQiI,aAAa,QAC3BzB,YAAa,IAAItC,EAAY,CACzBgF,WAAWlJ,EAAQsI,cAAc,sBAAsBL,aAAa,MACpEiB,WAAWlJ,EAAQsI,cAAc,sBAAsBL,aAAa,MACpEiB,WAAWlJ,EAAQsI,cAAc,sBAAsBL,aAAa,OACrE,CACCiB,WAAWlJ,EAAQsI,cAAc,mBAAmBL,aAAa,MACjEiB,WAAWlJ,EAAQsI,cAAc,mBAAmBL,aAAa,MACjEiB,WAAWlJ,EAAQsI,cAAc,mBAAmBL,aAAa,OAClE,CACCiB,WAAWlJ,EAAQsI,cAAc,kBAAkBL,aAAa,MAChEiB,WAAWlJ,EAAQsI,cAAc,kBAAkBL,aAAa,MAChEiB,WAAWlJ,EAAQsI,cAAc,kBAAkBL,aAAa,QAG3E,CACD,uBAAAc,CAAwB/I,GACpB,MAAO,CACH8H,GAAI9H,EAAQiI,aAAa,MACzBgB,KAAMjJ,EAAQiI,aAAa,QAC3BkB,QAAS,IAAInJ,EAAQoJ,iBAAiB,WAAWC,KAAIC,GAAMlL,KAAKsK,mBAAmBY,KAE1F,EC1EE,MAAMC,EACT,WAAAtL,CAAYuL,GACRpL,KAAKoL,OAASA,CACjB,CACD,iBAAOC,CAAWC,GACd,OAAOC,OAAOC,QAAQF,GACjBG,QAAO,EAAEC,EAAGvH,KAAOA,UACnB8G,KAAI,EAAES,EAAGvH,KAAO,GAAGuH,KAAKvH,MACxBwH,KAAK,IACb,CACD,sBAAOC,CAAgB5C,GACnB,IAAIW,EAAIM,EACR,MAAMhB,EAAQD,EAASC,MACjB4C,EAAY5C,EAAMzC,OAAS,EAAIyC,EAAM6C,MAAKC,GAAKA,EAAEF,YAAa,KAC9DG,EAAQ/C,EAAMzC,OAAS,EAAIyC,EAAM6C,MAAKC,GAAKA,EAAEC,QAAS,KACtDC,EAAUhD,EAAM6C,MAAKC,GAAKA,IAAMF,GAAaE,IAAMC,IACzD,MAAO,CACH7C,WAAY8C,EAAQ/C,SACpBgD,cAAeD,aAAyC,EAASA,EAAQC,cACzEC,WAA4F,QAA/ExC,EAAKsC,aAAyC,EAASA,EAAQE,kBAA+B,IAAPxC,OAAgB,EAASA,EAAGgC,KAAK,KACrIS,oBAAqBP,aAA6C,EAASA,EAAU3C,SACrFmD,gBAAiBL,aAAqC,EAASA,EAAM9C,SACrEoD,mBAA+F,QAA1ErC,EAAK+B,aAAqC,EAASA,EAAMO,mBAAgC,IAAPtC,OAAgB,EAASA,EAAGxJ,EAE1I,CACD,uBAAO+L,CAAiBxD,GACpB,MAAMyD,WAAEA,EAAUlF,KAAEA,GAASyB,EAC7B,MAAO,CACH0D,WAAYnF,EAAKmF,WACjB5M,MAAO2M,EAAW3M,MAClBC,OAAQ0M,EAAW1M,OACnB4M,qBAAsBF,EAAWG,aACjCC,cAAeJ,EAAWI,cAEjC,CACD,wBAAOC,CAAkB9D,GACrB,MAAM+D,QAAEA,GAAY/D,EACpB,MAAO,CACHgE,YAAaD,EAAQE,OACrBC,aAAcH,EAAQvL,QAE7B,CACD,kBAAa2L,CAAMC,GACf,OAAOD,MAAMC,GACRC,MAAKC,GAAYA,EAASC,SAC1BF,MAAKG,IACN,MACMC,EADMD,EAAaE,QAAQ,SAAU,KACvBC,MAAM3N,KAAK4N,UAC/B,OAAKH,EAGEA,EAAQxC,KAAItC,GAAKA,EAAE+E,QAAQ1N,KAAK4N,SAAU,QAFtCC,QAAQC,QAEoC,GAE9D,CACD,eAAM/E,CAAUC,GACZ,MAAMsC,EAAUC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAE,EAAE5C,EAAYS,gBAAgB5C,IAAY,CAAED,UAAWC,EAASzB,KAAKwB,UAAWiF,YAAahF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,GAAIC,SAAUnF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,GAAIE,OAAQpF,EAASzB,KAAK6G,OAAQC,OAAQrF,EAASzB,KAAK8G,OAASlD,EAAYqB,iBAAiBxD,IAAYmC,EAAY2B,kBAAkB9D,IACvXsF,EAAcnD,EAAYE,WAAWC,GAC3C,OAAOH,EAAYgC,MAAM,GAAGnN,KAAKoL,8BAA8BkD,IAClE,CACD,cAAMpF,CAASC,GACX,OAAOgE,MAAM,GAAGnN,KAAKoL,8BAA8BjC,KAC9CkE,MAAKC,GAAYA,EAASC,SAC1BF,MAAKG,IACN,MAAM/D,GAAS,IAAI8E,WAAYC,gBAAgBhB,EAAc,mBAC7D,OAAO,IAAIhE,EAASC,EAAO,GAElC,CACD,WAAMjG,CAAMwF,GACR,MAAMsC,EAAUC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI5C,EAAYS,gBAAgB5C,IAAY,CAAEgF,YAAahF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,GAAIC,SAAUnF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,KAAO/C,EAAYqB,iBAAiBxD,IAAYmC,EAAY2B,kBAAkB9D,IACzRsF,EAAcnD,EAAYE,WAAWC,GAC3C,OAAOuC,QAAQY,QAAQ,GAAGzO,KAAKoL,4BAA4BkD,IAC9D,CACD,WAAMjF,CAAML,GACR,MAAMsC,EAAUC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAE,EAAE5C,EAAYS,gBAAgB5C,IAAY,CAAED,UAAWC,EAASzB,KAAKwB,UAAWiF,YAAahF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,GAAIC,SAAUnF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,GAAIQ,SAAU1F,EAASzB,KAAKmH,SAAUN,OAAQpF,EAASzB,KAAK6G,OAAQC,OAAQrF,EAASzB,KAAK8G,KAAMM,UAAW3F,EAASzB,KAAKoH,UAAYxD,EAAYqB,iBAAiBxD,IAAYmC,EAAY2B,kBAAkB9D,IAC3bsF,EAAcnD,EAAYE,WAAWC,GAC3C,OAAOuC,QAAQY,QAAQ,GAAGzO,KAAKoL,8BAA8BkD,IAChE,CACD,YAAMhF,CAAON,GACT,MAAMsC,EAAUC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI5C,EAAYS,gBAAgB5C,IAAY,CAAEgF,YAAahF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,GAAIC,SAAUnF,EAASzB,KAAK0G,OAAOC,MAAM,KAAK,KAAO/C,EAAYqB,iBAAiBxD,IAAYmC,EAAY2B,kBAAkB9D,IAC/RsC,EAAQxL,MAAQoB,KAAKQ,IAAI4J,EAAQxL,MAAOwL,EAAQvL,QAChDuL,EAAQvL,OAASmB,KAAKQ,IAAI4J,EAAQxL,MAAOwL,EAAQvL,QACjD,MAAMuO,EAAcnD,EAAYE,WAAWC,GAC3C,OAAOH,EAAYgC,MAAM,GAAGnN,KAAKoL,2BAA2BkD,IAC/D,CACD,cAAM/E,CAASP,GACX,MAAMsC,EAAUC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAE,EAAE5C,EAAYS,gBAAgB5C,IAAY,CAAEgF,YAAahF,EAASzB,KAAK0G,SAAW9C,EAAYqB,iBAAiBxD,IAAYmC,EAAY2B,kBAAkB9D,IAC7NsF,EAAcnD,EAAYE,WAAWC,GAC3C,OAAOH,EAAYgC,MAAM,GAAGnN,KAAKoL,gCAAgCkD,IACpE,EAELnD,EAAYyC,SAAW,uBCgO2B,mBAApBgB,iBAAiCA,gBCzTxD,MAAMC,EACT,WAAAhP,CAAYuL,GACRpL,KAAKoL,OAASA,CACjB,CACD,YAAOnC,CAAMD,GACT,OAAOA,EAASC,MAAMgC,KAAIc,IACjB,MAA2B+C,EDkCrC,SAAgBC,EAAGC,GACtB,IAAIC,EAAI,CAAA,EACR,IAAK,IAAIlD,KAAKgD,EAAOxD,OAAO2D,UAAUC,eAAeC,KAAKL,EAAGhD,IAAMiD,EAAEK,QAAQtD,GAAK,IAC9EkD,EAAElD,GAAKgD,EAAEhD,IACb,GAAS,MAALgD,GAAqD,mBAAjCxD,OAAO+D,sBACtB,KAAIC,EAAI,EAAb,IAAgBxD,EAAIR,OAAO+D,sBAAsBP,GAAIQ,EAAIxD,EAAEvF,OAAQ+I,IAC3DP,EAAEK,QAAQtD,EAAEwD,IAAM,GAAKhE,OAAO2D,UAAUM,qBAAqBJ,KAAKL,EAAGhD,EAAEwD,MACvEN,EAAElD,EAAEwD,IAAMR,EAAEhD,EAAEwD,IAF4B,CAItD,OAAON,CACX,CC5CsDQ,CAAO1D,EAAG,CAAC,YAAa,UAClE,OAAO+C,CAAO,GAErB,CACD,uBAAOtC,CAAiBxD,GACpB,OAAOuC,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI/E,EAASyD,YAAa,CAAEI,cAAe7D,EAASyD,WAAWI,cAAc6C,YACnH,CACD,cAAO3C,CAAQ/D,GACX,OAAQA,EAAS+D,QAAQE,QACrB,IAAK,OACD,MAAO,CACH0C,KAAM,CACFnO,QAASwH,EAAS+D,QAAQvL,UAGtC,IAAK,MACD,MAAO,CACHoO,IAAK,CACDC,YAAa7G,EAAS+D,QAAQ8C,cAG1C,IAAK,OACD,MAAO,CACHC,KAAM,CACFtO,QAASwH,EAAS+D,QAAQvL,UAI1C,MAAO,CACHmO,KAAM,CACFnO,QAAS,IAGpB,CACD,uBAAauO,CAAW3C,EAAK4C,GACzB,OAAO7C,MAAMC,EAAK,CAAE6C,OAAQ,OAAQD,KAAME,KAAKC,UAAUH,KACpD3C,MAAKC,GAAYA,EAAS8C,SAC1B/C,MAAMgD,GACAA,EAAKjD,KAEnB,CACD,4BAAakD,CAAgBlD,EAAK4C,GAC9B,OAAO7C,MAAMC,EAAK,CAAE6C,OAAQ,OAAQD,KAAME,KAAKC,UAAUH,KACpD3C,MAAKC,GAAYA,EAAS8C,SAC1B/C,MAAMgD,GACAA,EAAKpF,KAAI7G,GAAKA,EAAEgJ,OAE9B,CACD,0BAAamD,CAAcnD,EAAK4C,GAC5B,OAAO7C,MAAMC,EAAK,CAAE6C,OAAQ,OAAQD,KAAME,KAAKC,UAAUH,KAAS3C,MAAKC,GAAYA,EAAS8C,QAC/F,CACD,+BAAaI,CAAmBpD,EAAK4C,GACjC,OAAO7C,MAAMC,EAAK,CAAE6C,OAAQ,OAAQD,KAAME,KAAKC,UAAUH,KAAS3C,MAAKC,GAAYA,EAAS8C,QAC/F,CACD,sBAAaK,CAAUrD,EAAK4C,GACxB,OAAO7C,MAAMC,EAAK,CAAE6C,OAAQ,OAAQD,KAAME,KAAKC,UAAUH,KACpD3C,MAAKC,GAAYA,EAAS8C,SAC1B/C,MAAMC,GAAaA,EAAS,IACpC,CACD,cAAMpE,CAASC,GACX,OAAOgE,MAAM,GAAGnN,KAAKoL,8BAA8BjC,KAC9CkE,MAAKC,GAAYA,EAASC,SAC1BF,MAAKG,IACN,MAAM/D,GAAS,IAAI8E,WAAYC,gBAAgBhB,EAAc,mBAC7D,OAAO,IAAIhE,EAASC,EAAO,GAElC,CACD,WAAMjG,CAAMwF,GACR,MAAMgH,EAAO,CACT/G,MAAO4F,EAAY5F,MAAMD,GACzB0H,KAAM,CACFlN,MAAO,CACHyK,OAAQjF,EAASzB,KAAK0G,SAG9BzB,iBAAkBqC,EAAYrC,iBAAiBxD,GAC/C+D,QAAS8B,EAAY9B,QAAQ/D,IAEjC,OAAO6F,EAAYkB,WAAW,GAAG/P,KAAKoL,kBAAmB4E,EAC5D,CACD,YAAM1G,CAAON,GACT,MAAMgH,EAAO,CACT/G,MAAO4F,EAAY5F,MAAMD,GACzB0H,KAAM,CACFpH,OAAQ,CACJ2E,OAAQjF,EAASzB,KAAK0G,SAG9BzB,iBAAkBqC,EAAYrC,iBAAiBxD,GAC/C+D,QAAS8B,EAAY9B,QAAQ/D,IAIjC,OAFAgH,EAAKxD,iBAAiB1M,MAAQoB,KAAKQ,IAAIsO,EAAKxD,iBAAiB1M,MAAOkQ,EAAKxD,iBAAiBzM,QAC1FiQ,EAAKxD,iBAAiBzM,OAASmB,KAAKQ,IAAIsO,EAAKxD,iBAAiB1M,MAAOkQ,EAAKxD,iBAAiBzM,QACpF8O,EAAYyB,gBAAgB,GAAGtQ,KAAKoL,kBAAmB4E,EACjE,CACD,cAAMzG,CAASP,GACX,IAAI0H,EAEAA,EADA1H,EAASzB,KAAKyC,YACP,CACH2G,OAAQ,CACJ3G,YAAahB,EAASzB,KAAKyC,cAK/BhB,EAASzB,KAAK6G,OACP,CACH7E,SAAU,CACN0E,OAAQjF,EAASzB,KAAK0G,OACtBG,OAAQpF,EAASzB,KAAK6G,SAKvB,CACH7E,SAAU,CACN0E,OAAQjF,EAASzB,KAAK0G,OACtB2C,UAAW5H,EAASzB,KAAKqJ,WAAa,EACtCC,QAAS7H,EAASzB,KAAKsJ,SAAW,EAClCC,MAAO9H,EAASzB,KAAKuJ,OAAS,EAC9BC,QAAS/H,EAASzB,KAAKwJ,UAAW,EAClCC,WAAYhI,EAASzB,KAAKyJ,YAAc,EACxCC,SAAUjI,EAASzB,KAAK0J,UAAY,EACpCC,OAAQlI,EAASzB,KAAK2J,QAAU,EAChCC,SAAUnI,EAASzB,KAAK4J,WAAY,IAKpD,MAAMnB,EAAO,CACT/G,MAAO4F,EAAY5F,MAAMD,GACzB0H,OACAlE,iBAAkBqC,EAAYrC,iBAAiBxD,GAC/C+D,QAAS8B,EAAY9B,QAAQ/D,IAEjC,OAAO6F,EAAYyB,gBAAgB,GAAGtQ,KAAKoL,kBAAmB4E,EACjE,CACD,eAAMjH,CAAUC,GACZ,MAAMgH,EAAO,CACT/G,MAAO4F,EAAY5F,MAAMD,GACzB0H,KAAM,CACF3H,UAAW,CACPW,GAAIV,EAASzB,KAAKwB,UAClBkF,OAAQjF,EAASzB,KAAK0G,OACtBmD,IAAKpI,EAASzB,KAAK6J,MAG3B5E,iBAAkBqC,EAAYrC,iBAAiBxD,GAC/C+D,QAAS8B,EAAY9B,QAAQ/D,IAEjC,OAAO6F,EAAYyB,gBAAgB,GAAGtQ,KAAKoL,kBAAmB4E,EACjE,CACD,mBAAMqB,CAAcrI,EAAUsI,GAC1B,MAAMtB,EAAOzE,OAAOwC,OAAO,CAAE9E,MAAO4F,EAAY5F,MAAMD,GAAW0H,KAAM,CAC/DlN,MAAO,CACHyK,OAAQjF,EAASzB,KAAK0G,SAE3BzB,iBAAkBqC,EAAYrC,iBAAiBxD,IAAahJ,KAAKuR,aAAaD,IACrF,aAAazC,EAAY0B,cAAc,GAAGvQ,KAAKoL,iBAAkB4E,EACpE,CACD,eAAMwB,CAAUxI,EAAUzI,GACtB,MAAMyP,EAAO,CACT/G,MAAO4F,EAAY5F,MAAMD,GACzBiF,OAAQjF,EAASzB,KAAK0G,OACtBzB,iBAAkBqC,EAAYrC,iBAAiBxD,GAC/CyI,UAAW,CAAClR,IAEhB,aAAasO,EAAY4B,UAAU,GAAGzQ,KAAKoL,cAAe4E,EAC7D,CACD,oBAAM0B,CAAe1I,EAAUsI,GAC3B,MAAMtB,EAAOzE,OAAOwC,OAAO,CAAE9E,MAAO4F,EAAY5F,MAAMD,GAAW0H,KAAM,CAC/DpH,OAAQ,CACJ2E,OAAQjF,EAASzB,KAAK0G,SAE3BzB,iBAAkBqC,EAAYrC,iBAAiBxD,IAAahJ,KAAKuR,aAAaD,IAGrF,OAFAtB,EAAKxD,iBAAiB1M,MAAQoB,KAAKQ,IAAIsO,EAAKxD,iBAAiB1M,MAAOkQ,EAAKxD,iBAAiBzM,QAC1FiQ,EAAKxD,iBAAiBzM,OAASmB,KAAKQ,IAAIsO,EAAKxD,iBAAiB1M,MAAOkQ,EAAKxD,iBAAiBzM,cAC9E8O,EAAY2B,mBAAmB,GAAGxQ,KAAKoL,iBAAkB4E,EACzE,CACD,sBAAM2B,CAAiB3I,EAAUsI,GAC7B,IAAIZ,EAEAA,EADA1H,EAASzB,KAAKyC,YACP,CACH2G,OAAQ,CACJ3G,YAAahB,EAASzB,KAAKyC,cAK/BhB,EAASzB,KAAK6G,OACP,CACH7E,SAAU,CACN0E,OAAQjF,EAASzB,KAAK0G,OACtBG,OAAQpF,EAASzB,KAAK6G,SAKvB,CACH7E,SAAU,CACN0E,OAAQjF,EAASzB,KAAK0G,OACtB2C,UAAW5H,EAASzB,KAAKqJ,WAAa,EACtCC,QAAS7H,EAASzB,KAAKsJ,SAAW,EAClCC,MAAO9H,EAASzB,KAAKuJ,OAAS,EAC9BC,QAAS/H,EAASzB,KAAKwJ,UAAW,EAClCC,WAAYhI,EAASzB,KAAKyJ,YAAc,EACxCC,SAAUjI,EAASzB,KAAK0J,UAAY,EACpCC,OAAQlI,EAASzB,KAAK2J,QAAU,EAChCC,SAAUnI,EAASzB,KAAK4J,WAAY,IAKpD,MAAMnB,EAAOzE,OAAOwC,OAAO,CAAE9E,MAAO4F,EAAY5F,MAAMD,GAAW0H,OAAMlE,iBAAkBqC,EAAYrC,iBAAiBxD,IAAahJ,KAAKuR,aAAaD,IACrJ,aAAazC,EAAY2B,mBAAmB,GAAGxQ,KAAKoL,iBAAkB4E,EACzE,CACD,YAAAuB,CAAaD,GACT,MAAO,CACHG,UAAWH,EAASM,OAAMC,GAA8B,iBAAZA,IAAwBP,OAAW3O,EAC/EmP,KAAMR,EAASM,OAAMC,GAA8B,iBAAZA,IAAwBP,OAAW3O,EAEjF,EC/NE,MAAMoP,EACT,WAAAlS,CAAYuL,EAAQ4G,EAAKC,GACrB,OAAQD,GACJ,IAAK,SACDhS,KAAKkS,UAAY,IAAIpJ,EACrB,MACJ,IAAK,KAQL,QACI9I,KAAKkS,UAAY,IAAI/G,EAAYC,GACjCpL,KAAKmS,YAAc,IAAItD,EAAYzD,GACnC,MAPJ,IAAK,KACDpL,KAAKkS,UAAY,IAAIrD,EAAYzD,GACjCpL,KAAKmS,YAAc,IAAItD,EAAYzD,GAO3CpL,KAAKiS,SAAWA,EAChBjS,KAAKoS,UAAY,EACjBpS,KAAKqS,OAAS,EACdrS,KAAKsS,MAAQ,EACbtS,KAAKuS,UAAY,GACjBvS,KAAKwS,YAAcP,GAAYA,EAASO,YAAcP,EAASO,YAAc,OAC7ExS,KAAKyS,eAAiBR,GAAYA,EAASQ,eAAiBR,EAASQ,eAAiB,OACtFzS,KAAK0S,UAAYT,GAAYA,EAASS,UAAYT,EAASS,UAAY,MAC1E,CACD,YAAIC,GACA,OAAO3S,KAAKsS,MAAQtS,KAAKqS,OAASrS,KAAKsS,MAAQ,CAClD,CACD,uBAAMM,CAAkB5J,GACpBhJ,KAAKoS,WAAa,EAClBpS,KAAKqS,OAAS,EACdrS,KAAKsS,MAAQ,EACbtS,KAAKwS,YAAYxS,KAAK2S,UACtB,MAAMP,UAAEA,GAAcpS,KACtB,OAAOA,KAAKkS,UACP1O,MAAMwF,GACNqE,MAAKwF,GAAO7S,KAAK8S,UAAUD,EAAKT,KAChC/E,MAAKnK,IACNlD,KAAK0S,UAAU1S,KAAK2S,UACbzP,IAEd,CACD,uBAAM6P,CAAkB1J,EAAOL,GAC3BhJ,KAAKoS,WAAa,EAClBpS,KAAKqS,OAAS,EACdrS,KAAKsS,MAAQ,EACbtS,KAAKwS,YAAYxS,KAAK2S,UACtB,MAAMP,UAAEA,GAAcpS,KACtB,OAAOA,KAAKkS,UACP7I,MAAML,GACNqE,MAAKwF,GAAO7S,KAAKgT,UAAU3J,EAAOwJ,IAAO7J,EAASzB,KAAK8G,KAAM+D,KAC7D/E,MAAK,KACNrN,KAAK0S,UAAU1S,KAAK2S,UACbtJ,IAEd,CACD,wBAAM4J,CAAmBjK,GACrBhJ,KAAKoS,WAAa,EAClBpS,KAAKqS,OAAS,EACdrS,KAAKsS,MAAQ,EACbtS,KAAKwS,YAAYxS,KAAK2S,UACtB,MAAMP,UAAEA,GAAcpS,KACtB,OAAOA,KAAKkS,UACP5I,OAAON,GACPqE,MAAK6F,IACNlT,KAAKsS,MAAQY,EAAK1M,OAClB,MAAM2M,EAAWD,EAAKjI,KAAI4H,GAAO7S,KAAK8S,UAAUD,EAAKT,KACrD,OAAOvE,QAAQuF,IAAID,EAAS,IAE3B9F,MAAKgG,IACNrT,KAAK0S,UAAU1S,KAAK2S,UACbU,IAEd,CACD,0BAAMC,CAAqBtK,EAAUzI,GACjC,IAAIoJ,EACJ3J,KAAKoS,WAAa,EAClBpS,KAAKqS,OAAS,EACdrS,KAAKsS,MAAQ,EACbtS,KAAKwS,YAAYxS,KAAK2S,UACtB,MAAMP,UAAEA,GAAcpS,KACtB,OAAIgJ,EAASzB,KAAKwB,UACmE,SAAhD,QAA3BY,EAAKX,EAAS+D,eAA4B,IAAPpD,OAAgB,EAASA,EAAGsD,QAC1DjN,KAAKkS,UAAU7I,MAAML,GAAUqE,MAAKwF,GAChC7S,KAAKuT,gBAAgBV,EAAK7J,EAASzB,KAAK6G,OAAQ,GAAIgE,KAIxDpS,KAAKkS,UAAUnJ,UAAUC,GAAUqE,MAAK6F,GACpClT,KAAKwT,gBAAgBN,EAAMlK,EAASzB,KAAK8G,KAAM9N,EAAU6R,KAKjEpS,KAAKkS,UAAU3I,SAASP,GAAUqE,MAAK6F,GACnClT,KAAKwT,gBAAgBN,EAAMlK,EAASzB,KAAK8G,KAAM9N,EAAU6R,IAG3E,CACD,eAAMU,CAAUD,EAAKT,GACjB,MAAM5O,EAAQ,IAAIiQ,MAClBjQ,EAAMkQ,YAAoC,UAAtBC,SAASC,UAAyB7B,EAAO8B,eAAehB,GAAc,YAAP,KACnF,MAAMiB,EAAU,IAAIjG,SAAQ,CAACY,EAASX,KAClCtK,EAAMuQ,iBAAiB,QAAQ,KACvB3B,IAAcpS,KAAKoS,YAEvBpS,KAAKqS,QAAU,EACfrS,KAAKyS,eAAezS,KAAK2S,UACzBlE,EAAQjL,GAAM,GACf,CAAEwQ,MAAM,IACXxQ,EAAMuQ,iBAAiB,SAAS/E,IACxBoD,IAAcpS,KAAKoS,WAEvBtE,EAAO,GAAGkB,EAAEiF,UAAUpB,IAAM,GAC7B,CAAEmB,MAAM,GAAO,IAGtB,OADAxQ,EAAMqP,IAAMA,EACLiB,CACV,CACD,eAAAN,CAAgBN,EAAM7E,EAAM9N,EAAU6R,GAClCpS,KAAKsS,MAAQY,EAAK1M,OAClB,MAAM2M,EAAW,IAAIe,MAAMhB,EAAK1M,QAC1B2N,EAAQ5T,GAAY,EAC1B,IAAK,IAAIgP,EAAI,EAAG6E,EAAIlB,EAAK1M,OAAQ+I,EAAI6E,EAAG7E,GAAK,EAAG,CAC5C,MAAM8E,EAAOnT,KAAKoT,KAAK/E,EAAI,IAAMA,EAAI,GAAM,EAAI,GAAK,GAC9CgF,EAAQlG,EAAOpK,EAAMU,IAAIwP,EAAQE,EAAMD,GAAK7E,EAClD4D,EAASoB,GAASvU,KAAK8S,UAAUI,EAAKqB,GAAQnC,EACjD,CAID,OAHAvE,QAAQuF,IAAID,GACP9F,MAAK,IAAMrN,KAAK0S,UAAU1S,KAAK2S,YAC/B6B,OAAM,SACJrB,CACV,CACD,eAAMH,CAAU3J,EAAOwJ,EAAKxE,EAAM+D,GAC9B/I,EAAMgF,KAAOA,EACb,MAAMyF,EAAU,IAAIjG,SAAQ,CAACY,EAASX,KAClCzE,EAAM0K,iBAAiB,kBAAkB,KACjC3B,IAAcpS,KAAKoS,YAEvBpS,KAAKqS,QAAU,EACfrS,KAAKyS,eAAezS,KAAK2S,UACzBlE,IAAS,GACV,CAAEuF,MAAM,IACX3K,EAAM0K,iBAAiB,SAAS/E,IACxBoD,IAAcpS,KAAKoS,WAEvBtE,EAAO,GAAGkB,EAAEiF,UAAUpB,IAAM,GAC7B,CAAEmB,MAAM,GAAO,IAItB,OAFA3K,EAAMwJ,IAAMA,EACZxJ,EAAMoL,OACCX,CACV,CACD,oBAAMY,CAAerL,EAAO+H,EAAKhD,EAAQmB,EAAG6C,GACxC,IAAIuC,EAAQ,EACZ,OAAO,IAAI9G,SAAQ,CAACY,EAASX,KACzB,MAAM8G,EAAS,KACX,GAAIxC,IAAcpS,KAAKoS,UACnB,OACJ,GAAIuC,IAAUpF,EAEV,YADAoF,GAAS,GAGbtL,EAAMwL,oBAAoB,SAAUD,GACpC,MAAME,EAASjT,SAASC,cAAc,UACtCgT,EAAOhV,MAAQuJ,EAAM0L,WACrBD,EAAO/U,OAASsJ,EAAM2L,YACNF,EAAO1S,WAAW,MAC1BiB,UAAUgG,EAAO,EAAG,GAC5B,MAAM7F,EAAQ,IAAIiQ,MAClBjQ,EAAMqP,IAAMiC,EAAOG,YACnBxG,EAAQjL,GACRxD,KAAKqS,QAAU,EACfrS,KAAKyS,eAAezS,KAAK2S,UACrBpD,IAAMnB,EAAS,IACf/E,EAAM6L,aAAe,EAAI9D,EAC5B,EAEL/H,EAAM0K,iBAAiB,SAAUa,GACjCvL,EAAM0K,iBAAiB,SAAS/E,IACxBoD,IAAcpS,KAAKoS,WAEvBtE,EAAOkB,EAAE,GACV,CAAEgF,MAAM,GAAO,GAEzB,CACD,eAAAT,CAAgBV,EAAKzE,EAAQgD,EAAKgB,GAC9BpS,KAAKsS,MAAQlE,EACb,MAAM+E,EAAW,IAAIe,MAAM9F,GACrB/E,EAAQxH,SAASC,cAAc,SACrC,IAAK,IAAIyN,EAAI,EAAG6E,EAAIhG,EAAQmB,EAAI6E,EAAG7E,GAAK,EACpC4D,EAAS5D,GAAKvP,KAAK0U,eAAerL,EAAO+H,EAAKhD,EAAQmB,EAAG6C,GAY7D,OAVA/I,EAAM0K,iBAAiB,kBAAkB,KACjC3B,IAAcpS,KAAKoS,YAEvB/I,EAAM6L,YAAc,EAAI9D,EAAM,EAAC,GAChC,CAAE4C,MAAM,IACX3K,EAAMwJ,IAAMA,EACZxJ,EAAMoL,OACN5G,QAAQuF,IAAID,GACP9F,MAAK,IAAMrN,KAAK0S,UAAU1S,KAAK2S,YAC/B6B,OAAM,SACJrB,CACV,CACD,uBAAMgC,CAAkBnM,EAAUsI,GAC9B,OAAKtR,KAAKmS,kBAGGnS,KAAKmS,YAAYd,oBAAoBrR,KAAKoV,QAAQpM,GAAWsI,GAF/DzD,QAAQC,OAAO,IAAI1E,MAAM,uCAGvC,CACD,wBAAMiM,CAAmBrM,EAAUsI,GAC/B,OAAKtR,KAAKmS,kBAGGnS,KAAKmS,YAAYT,qBAAqB1R,KAAKoV,QAAQpM,GAAWsI,GAFhEzD,QAAQC,OAAO,IAAI1E,MAAM,uCAGvC,CACD,0BAAMkM,CAAqBtM,EAAUsI,GACjC,OAAKtR,KAAKmS,kBAGGnS,KAAKmS,YAAYR,uBAAuB3R,KAAKoV,QAAQpM,GAAWsI,GAFlEzD,QAAQC,OAAO,IAAI1E,MAAM,uCAGvC,CACD,mBAAMmM,CAAcvM,EAAUzI,GAC1B,OAAKP,KAAKmS,kBAGGnS,KAAKmS,YAAYX,gBAAgBxR,KAAKoV,QAAQpM,GAAWzI,GAF3DsN,QAAQC,OAAO,IAAI1E,MAAM,sCAGvC,CACD,sBAAMoM,CAAiBxM,EAAUzI,EAAUgU,EAAOnG,GAC9C,OAAKpO,KAAKmS,kBAGGnS,KAAKmS,YAAYX,gBAAgBxR,KAAKyV,sBAAsBzM,EAAUuL,EAAOnG,GAAS7N,GAFxFsN,QAAQC,OAAO,IAAI1E,MAAM,sCAGvC,CACD,oBAAMsM,CAAe1M,EAAUzI,EAAU2F,GACrC,OAAKlG,KAAKmS,kBAGGnS,KAAKmS,YAAYX,gBAAgBxR,KAAK2V,oBAAoB3M,EAAU9C,GAAO3F,GAF7EsN,QAAQC,OAAO,IAAI1E,MAAM,sCAGvC,CACD,aAAMgM,CAAQpM,GACV,IAAIW,EACJ,IAAK3J,KAAKmS,YACN,OAAOnJ,EAEX,GAAIhJ,KAAKkS,qBAAqBrD,EAC1B,OAAO7F,EAEX,IAAKA,EAASzB,KAAK0G,OACf,OAAOjF,EAEX,MAAMiD,EAAUjD,EAASC,MAAM6C,MAAK7C,IAAUA,EAAM+C,QAAU/C,EAAM4C,YACpE,IAAKI,EACD,OAAOjD,EAEX,IAAIE,EAAWlJ,KAAKuS,UAAUzG,MAAK8J,GAAMA,EAAGlM,KAAOuC,EAAQ/C,WACtDA,GAAaA,EAASO,SACvBP,QAAiBlJ,KAAKkS,UAAUhJ,SAAS+C,EAAQ/C,UACjDlJ,KAAKuS,UAAUsD,KAAK3M,IAExB,MAAM4M,EAAyC,QAA/BnM,EAAKX,EAASzB,KAAK0G,cAA2B,IAAPtE,OAAgB,EAASA,EAAGuE,MAAM,KACnFlE,EAAgC,IAAlB8L,EAAOtP,OAAesP,EAAO,QAAKnT,EAChDoH,EAA+B,IAAlB+L,EAAOtP,OAAesP,EAAO,GAAKA,EAAO,GACtD1L,EAAWlB,EAASY,YAAYC,EAAYC,GAClD,GAAII,EACA,OAAOmB,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAE,EAAE/E,GAAW,CAAEzB,KAAMgE,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI/E,EAASzB,MAAO,CAAE0G,OAAQ7D,MAEnH,CACD,MAAM2L,EAAgB7M,EAASuB,iBAAiBV,GAChD,OAAIgM,EACOxK,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAE,EAAE/E,GAAW,CAAEzB,KAAMgE,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI/E,EAASzB,MAAO,CAAEyC,YAAa+L,MAGlH/M,CAEd,CACJ,CACD,2BAAMyM,CAAsBzM,EAAUuL,EAAOnG,GACzC,IAAKpO,KAAKmS,YACN,OAAOnJ,EAEX,MAAMiD,EAAUjD,EAASC,MAAM6C,MAAK7C,IAAUA,EAAM+C,QAAU/C,EAAM4C,YACpE,IAAKI,EACD,OAAOjD,EAEX,IAAIE,EAAWlJ,KAAKuS,UAAUzG,MAAK8J,GAAMA,EAAGlM,KAAOuC,EAAQ/C,WAK3D,GAJKA,IACDA,QAAiBlJ,KAAKkS,UAAUhJ,SAAS+C,EAAQ/C,UACjDlJ,KAAKuS,UAAUsD,KAAK3M,IAEpBlJ,KAAKkS,qBAAqB/G,EAAa,CACvC,IAAKnC,EAASzB,KAAK0G,OACf,OAAOjF,EAEX,MAAM+M,EAAgB7M,EAASuB,iBAAiBzB,EAASzB,KAAK0G,QAC9D,IAAK8H,EACD,OAAO/M,EAEX,MAAMgB,EAAcd,EAASwB,mBAAmBqL,GAChD,IAAK/L,EACD,OAAOhB,EAEX,MAAMiF,EAASjE,EAAYe,QAAQwJ,GACnC,OAAKtG,EAGE1C,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI/E,GAAW,CAAEzB,KAAMgE,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI/E,EAASzB,MAAO,CAAE0G,OAAQA,EAAOvE,OAFhHV,CAGd,CACI,GAAIhJ,KAAKkS,qBAAqBrD,EAAa,CAC5C,GAAI7F,EAASzB,KAAK0G,OAAQ,CACtB,MAAMA,EAAS/E,EAASiB,cAAcnB,EAASzB,KAAK0G,QACpD,IAAKA,EACD,OAAOjF,EAEX,MAAMgN,EAAY,IAAI3O,EAAU4G,EAAO7F,aACjCiM,EAAQ,EAAInT,KAAKuD,GAAM2J,EAC7B4H,EAAUtO,WAAc6M,EAAQF,GAAS,EAAInT,KAAKuD,IAClD,MAAM6C,EAAM0O,EAAU5N,YAAY6F,EAAO7F,YAAYnC,QACrD,OAAOsF,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI/E,GAAW,CAAEzB,KAAMgE,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI/E,EAASzB,MAAO,CAAE0G,OAAQ,CACxGvE,GAAIuE,EAAOvE,GACXpC,IAAK,CACDrB,OAAQ,CACJzF,EAAG8G,EAAIrB,OAAO,GACdxF,EAAG6G,EAAIrB,OAAO,GACdwB,EAAGH,EAAIrB,OAAO,IAElBD,IAAK,CACDxF,EAAG8G,EAAItB,IAAI,GACXvF,EAAG6G,EAAItB,IAAI,GACXyB,EAAGH,EAAItB,IAAI,IAEfG,GAAI,CACA3F,EAAG8G,EAAInB,GAAG,GACV1F,EAAG6G,EAAInB,GAAG,GACVsB,EAAGH,EAAInB,GAAG,SAIjC,CACI,GAAI6C,EAASzB,KAAKyC,YAAa,CAChC,MAAMA,EAAcd,EAASwB,mBAAmB1B,EAASzB,KAAKyC,aAC9D,IAAKA,EACD,OAAOhB,EAEX,MAAMiF,EAASjE,EAAYe,QAAQwJ,GACnC,OAAKtG,EAGE1C,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI/E,GAAW,CAAEzB,KAAMgE,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI/E,EAASzB,MAAO,CAAE0G,OAAQA,EAAOvE,OAFhHV,CAGd,CAEG,OAAOA,CAEd,CAEG,OAAOA,CAEd,CACD,yBAAM2M,CAAoB3M,EAAU9C,GAChC,MAAM+F,EAAUjD,EAASC,MAAM6C,MAAK7C,IAAUA,EAAM+C,QAAU/C,EAAM4C,YACpE,IAAKI,EACD,OAAOjD,EAEX,IAQIoB,EARAlB,EAAWlJ,KAAKuS,UAAUzG,MAAK8J,GAAMA,EAAGlM,KAAOuC,EAAQ/C,WAK3D,GAJKA,IACDA,QAAiBlJ,KAAKkS,UAAUhJ,SAAS+C,EAAQ/C,UACjDlJ,KAAKuS,UAAUsD,KAAK3M,KAEnBF,EAASzB,KAAK0G,OACf,OAAOjF,EAGX,GAAIhJ,KAAKkS,qBAAqB/G,EAAa,CACvC,MAAM2K,EAAS9M,EAASzB,KAAK0G,OAAOC,MAAM,KACpClE,EAAgC,IAAlB8L,EAAOtP,OAAesP,EAAO,QAAKnT,EAChDoH,EAA+B,IAAlB+L,EAAOtP,OAAesP,EAAO,GAAKA,EAAO,GAC5D1L,EAAWlB,EAASY,YAAYC,EAAYC,EAC/C,MACQhK,KAAKkS,qBAAqBrD,IAC/BzE,EAAWpB,EAASzB,KAAK0G,QAE7B,IAAK7D,EACD,OAAOpB,EAEX,MAAMiF,EAAS/E,EAASiB,cAAcC,GACtC,IAAK6D,EACD,OAAOjF,EAEX,MAAMZ,EAActC,EAAYC,aAAakI,EAAO7F,YAAYpC,IAAKiI,EAAO7F,YAAYnC,OAAQC,GAChG,OAAOqF,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI/E,GAAW,CAAEzB,KAAMgE,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI/E,EAASzB,MAAO,CAAE0G,OAAQ,CACxGvE,GAAIuE,EAAOvE,GACXpC,IAAK,CACDrB,OAAQ,CACJzF,EAAG4H,EAAYnC,OAAO,GACtBxF,EAAG2H,EAAYnC,OAAO,GACtBwB,EAAGW,EAAYnC,OAAO,IAE1BD,IAAK,CACDxF,EAAG4H,EAAYpC,IAAI,GACnBvF,EAAG2H,EAAYpC,IAAI,GACnByB,EAAGW,EAAYpC,IAAI,IAEvBG,GAAI,CACA3F,EAAG4H,EAAYjC,GAAG,GAClB1F,EAAG2H,EAAYjC,GAAG,GAClBsB,EAAGW,EAAYjC,GAAG,KAG1B8P,KAAM,CACFC,IAAK,OAEPzJ,WAAYlB,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI/E,EAASyD,YAAa,CAAE3M,MAAOoB,KAAKQ,IAAIsH,EAASyD,WAAW3M,MAAOkJ,EAASyD,WAAW1M,QAASA,OAAQmB,KAAKQ,IAAIsH,EAASyD,WAAW3M,MAAOkJ,EAASyD,WAAW1M,WAC7N,CACD,WAAAyS,CAAYG,GACJ3S,KAAKiS,UACLjS,KAAKiS,SAASO,YAAYG,EAEjC,CACD,cAAAF,CAAeE,GACP3S,KAAKiS,UACLjS,KAAKiS,SAASQ,eAAeE,EAEpC,CACD,SAAAD,CAAUC,GACF3S,KAAKiS,UACLjS,KAAKiS,SAASS,UAAUC,EAE/B,CACD,qBAAOkB,CAAesC,GAClB,IAAI/I,EACJ,IACIA,EAAM,IAAIgJ,IAAID,EACjB,CACD,MAAOE,GACH,OAAO,CACV,CACD,MAAwB,UAAjBjJ,EAAIwG,UAAyC,WAAjBxG,EAAIwG,QAC1C,EC7bE,MAAM0C,EACT,WAAAzW,GACIG,KAAK4B,QAAUC,SAASC,cAAc,SACtC9B,KAAK4B,QAAQG,UAAUC,IAAI,mBAC3BhC,KAAK4B,QAAQK,MAAMC,QAAU,IAC7BlC,KAAK4B,QAAQ9B,MAAQ,EACrBE,KAAK4B,QAAQ7B,OAAS,EACtBC,KAAK4B,QAAQ2U,aAAa,QAAS,IACnCvW,KAAK4B,QAAQ2U,aAAa,cAAe,IACzCvW,KAAK4B,QAAQ2U,aAAa,UAAW,OACxC,CACD,IAAA3T,GACI5C,KAAK4B,QAAQK,MAAMC,QAAU,GAChC,CACD,IAAAa,GACI/C,KAAK4B,QAAQK,MAAMC,QAAU,GAChC,CACD,MAAAc,CAAOlD,EAAOC,EAAQO,EAAYI,GAC9B,MAAMK,EAAWb,EAASQ,IAAIJ,EAAY,IAAIV,EAAWE,EAAOC,GAASW,GACzEV,KAAK4B,QAAQK,MAAM9B,IAAM,GAAGY,EAASZ,QACrCH,KAAK4B,QAAQK,MAAM7B,KAAO,GAAGW,EAASX,SACtCJ,KAAK4B,QAAQK,MAAMnC,MAAQ,GAAGiB,EAASjB,UACvCE,KAAK4B,QAAQK,MAAMlC,OAAS,GAAGgB,EAAShB,WACpCO,EAAWR,QAAUE,KAAK4B,QAAQ9B,OAASQ,EAAWP,SAAWC,KAAK4B,QAAQ7B,SAC9EC,KAAK4B,QAAQ9B,MAAQQ,EAAWR,MAChCE,KAAK4B,QAAQ7B,OAASO,EAAWP,OAExC,EC3BE,MAAMyW,EACT,WAAA3W,CAAY4W,EAAW3B,EAAQ4B,GAC3B1W,KAAKyW,UAAYA,EACjBzW,KAAK8U,OAASA,EACd9U,KAAK0W,OAASA,EACd1W,KAAK2W,YAAc,EACtB,CACD,OAAAnU,GAAa,CACb,IAAAI,GACI5C,KAAK8U,OAAOlS,MAAK,GACjB5C,KAAKyW,UAAU1U,UAAUC,IAAI,4BAChC,CACD,IAAAe,GACI/C,KAAK8U,OAAO/R,MAAK,GACjB/C,KAAKyW,UAAU1U,UAAU6U,OAAO,4BACnC,CACD,UAAMnC,CAAKzL,EAAUsI,EAAUuF,EAAO1T,GAClC,IAAI2Q,EAAUjG,QAAQY,UACtB,MAAMqI,EAAe5G,KAAKC,UAAUnH,GAEhC8K,EADAgD,IAAiB9W,KAAK8W,cAAgB9W,KAAKwD,MACjCsQ,EAAQzG,MAAK,IAAMrN,KAAK8U,OAAO7R,KAAKjD,KAAKwD,MAAOL,EAAM,OAGtD2Q,EAAQzG,MAAK,IAAMrN,KAAK0W,OAAO9D,kBAAkB5J,GAAUqE,MAAK7J,IACtExD,KAAK8U,OAAO7R,KAAKO,EAAOL,EAAM,KAC9BnD,KAAKwD,MAAQA,CAAK,MAG1B,MAAMuT,EAAe7G,KAAKC,UAAUmB,GAapC,OAZIwF,IAAiB9W,KAAK8W,cAAgBC,IAAiB/W,KAAK+W,eACxDzF,EAAS9K,OACTsN,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK0W,OAAOvB,kBAAkBnM,EAAUsI,GAAUjE,MAAKiE,IAChFtR,KAAK2W,YAAcrF,CAAQ,MAI/BtR,KAAK2W,YAAc,IAG3B3W,KAAK+W,aAAeA,EACpB/W,KAAK8W,aAAeA,EACbhD,CACV,CACD,UAAMkD,CAAKhO,EAAUzI,GACjB,MAAMD,EAAa,IAAIV,EAAWoJ,EAASyD,WAAW3M,MAAOkJ,EAASyD,WAAW1M,QAC3EkX,EAAsB/W,EAASkB,UAAUd,EAAYN,KAAK8U,OAAOxU,WAAYN,KAAK8U,OAAOpU,IAAKH,GACpG,OAAOP,KAAK0W,OAAOnB,cAAcvM,EAAUiO,EAC9C,CACD,QAAA3F,CAAShR,GACL,OAAON,KAAK2W,YACP1L,KAAI4G,GAAYtG,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI8D,GAAU,CAAEqF,WAAYhX,EAASY,QAAQR,EAAYN,KAAK8U,OAAOxU,WAAYN,KAAK8U,OAAOpU,IAAKmR,EAAQqF,gBACtJjM,KAAI4G,GAAYtG,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI8D,GAAU,CAAEsF,WAAYjX,EAASG,SAASL,KAAK8U,OAAOxU,WAAYuR,EAAQqF,YAAcrF,EAAQsF,WAAa,kBACrK,CACD,QAAAnO,CAASiL,EAAMzS,GACX,OAAOxB,KAAK8U,OAAOlT,QAAQqT,UAAUhB,EAAMzS,EAC9C,CACD,WAAA4V,CAAYpI,GAAM,CAClB,WAAAqI,CAAYrI,GAAM,CAClB,SAAAsI,CAAUtI,GAAM,CAChB,YAAAuI,CAAavI,GAAM,CACnB,YAAAwI,CAAaxI,GAAM,CACnB,WAAAyI,CAAYzI,GAAM,CAClB,UAAA0I,CAAW1I,GAAM,CACjB,mBAAA2I,CAAoB3I,GAAM,ECjEvB,MAAM4I,EACT,WAAA/X,CAAY4W,EAAWpN,EAAOqN,GAC1B1W,KAAKyW,UAAYA,EACjBzW,KAAK0W,OAASA,EACd1W,KAAKqJ,MAAQA,CAChB,CACD,OAAA7G,GAAa,CACb,IAAAI,GACI5C,KAAKqJ,MAAMzG,OACX5C,KAAKyW,UAAU1U,UAAUC,IAAI,4BAChC,CACD,IAAAe,GACI/C,KAAKqJ,MAAMtG,OACX/C,KAAKyW,UAAU1U,UAAU6U,OAAO,4BACnC,CACD,UAAMnC,CAAKzL,GACP,MAAM6O,EAAO3H,KAAKC,UAAUnH,GAC5B,OAAI6O,IAAS7X,KAAK6X,MACd7X,KAAKqJ,MAAMzH,QAAQ6S,OACZ5G,QAAQY,YAEnBzO,KAAK6X,KAAOA,EACL7X,KAAK0W,OAAO3D,kBAAkB/S,KAAKqJ,MAAMzH,QAASoH,GAC5D,CACD,UAAMgO,CAAKhO,EAAUzI,GACjB,OAAOsN,QAAQC,QAClB,CACD,QAAAwD,CAAShR,GACL,MAAO,EACV,CACD,QAAA0I,CAASiL,EAAMzS,GACX,MAAO,oFACV,CACD,UAAMsW,GACF,OAAO,IAAIjK,SAAQ,CAACY,EAASX,KACzB9N,KAAKqJ,MAAMzH,QAAQmS,iBAAiB,SAAS,KACzCtF,GAAS,GACV,CAAEuF,MAAM,IACXhU,KAAKqJ,MAAMzH,QAAQkW,OAAOtD,MAAM1G,GAChC9N,KAAK4C,MAAM,GAElB,CACD,WAAAwU,CAAYpI,GAAM,CAClB,WAAAqI,CAAYrI,GAAM,CAClB,SAAAsI,CAAUtI,GAAM,CAChB,YAAAuI,CAAavI,GAAM,CACnB,YAAAwI,CAAaxI,GAAM,CACnB,WAAAyI,CAAYzI,GAAM,CAClB,UAAA0I,CAAW1I,GAAM,CACjB,mBAAA2I,CAAoB3I,GAAM,ECjDvB,MAAM+I,EACT,WAAAlY,CAAYW,EAAGC,GACXT,KAAKQ,EAAIA,EACTR,KAAKS,EAAIA,CACZ,CACD,KAAA0G,GACI,OAAO,IAAI4Q,EAAM/X,KAAKQ,EAAGR,KAAKS,EACjC,ECNE,MAAMuX,EACT,0BAAOC,CAAoBjJ,GACvB,OAAO,IAAI+I,EAAM/I,EAAEkJ,QAASlJ,EAAEmJ,QACjC,CACD,0BAAOC,CAAoBpJ,GACvB,MAAMqJ,EAAQrJ,EAAEsJ,cAAc,IAAMtJ,EAAEuJ,eAAe,GACrD,OAAO,IAAIR,EAAMM,EAAMH,QAASG,EAAMF,QACzC,ECPE,MAAMK,EACT,WAAA3Y,IAAe4Y,GACS,IAAhBA,EAAKjS,UACF,EAAGxG,KAAK0Y,EAAG,EAAG1Y,KAAKmE,EAAG,EAAGnE,KAAK2Y,GAAMF,GACvCzY,KAAK4Y,EAAIxS,EAAAA,GAAGO,MAAM3G,KAAK0Y,EAAG1Y,KAAKmE,IAEV,IAAhBsU,EAAKjS,SACP,EAAGxG,KAAK0Y,EAAG,EAAG1Y,KAAKmE,EAAG,EAAGnE,KAAK4Y,EAAG,EAAG5Y,KAAK2Y,GAAMF,IAGlDzY,KAAK0Y,EAAI,CAAC,EAAG,EAAG,GAChB1Y,KAAKmE,EAAI,CAAC,EAAG,EAAG,GAChBnE,KAAK4Y,EAAI,CAAC,EAAG,EAAG,GAChB5Y,KAAK2Y,EAAI,CAAC,EAAG,EAAG,GAEvB,CACD,uBAAIE,GAKA,MAAO,IAJG,CAAC7Y,KAAK0Y,EAAE,GAAI1Y,KAAK0Y,EAAE,GAAI1Y,KAAK0Y,EAAE,GAAI,MAClC,CAAC1Y,KAAKmE,EAAE,GAAInE,KAAKmE,EAAE,GAAInE,KAAKmE,EAAE,GAAI,MAClC,CAACnE,KAAK4Y,EAAE,GAAI5Y,KAAK4Y,EAAE,GAAI5Y,KAAK4Y,EAAE,GAAI,MAClC,CAAC5Y,KAAK2Y,EAAE,GAAI3Y,KAAK2Y,EAAE,GAAI3Y,KAAK2Y,EAAE,GAAI,GAE/C,CACD,uBAAIG,GACA,OAAO9R,KAAGC,QAAQjH,KAAK6Y,oBAC1B,EC1BE,MAAME,EACT,WAAAlZ,CAAYW,EAAGC,EAAGuY,GACdhZ,KAAKQ,EAAIA,EACTR,KAAKS,EAAIA,EACTT,KAAKgZ,KAAOA,CACf,ECHE,MAAMC,EACT,WAAApZ,CAAYqZ,GACRlZ,KAAKmZ,OAAS,GACdnZ,KAAKkZ,SAAWA,EAChBlZ,KAAKoZ,UAAY,IAAIrB,EAAM,EAAK,GAChC/X,KAAKqZ,SAAW,IAAItB,EAAM,EAAK,GAC/B/X,KAAKqO,KAAOrO,KAAKqO,KAAKiL,KAAKtZ,KAC9B,CACD,OAAAwC,GACQxC,KAAKuZ,mBACL7W,qBAAqB1C,KAAKuZ,kBAC1BvZ,KAAKuZ,sBAAmB5W,EAE/B,CACD,KAAA6W,CAAMC,GACF,MAAMT,EAAOU,KAAKC,MAClB3Z,KAAKmZ,OAASnZ,KAAKmZ,OAAO1N,QAAOM,GAAKiN,EAAOjN,EAAEiN,MAAQ,MACvDhZ,KAAKmZ,OAAOtD,KAAK,IAAIkD,EAAaU,EAAMjZ,EAAGiZ,EAAMhZ,EAAGuY,IACpDhZ,KAAKoZ,UAAYK,CACpB,CACD,KAAAtF,GACI,GAA2B,IAAvBnU,KAAKmZ,OAAO3S,OACZ,OAEJ,MAAMoT,EAAa5Z,KAAKmZ,OAAO,GACzBC,EAAYpZ,KAAKmZ,OAAOnZ,KAAKmZ,OAAO3S,OAAS,GAC7CqT,EAAKT,EAAU5Y,EAAIoZ,EAAWpZ,EAC9BsZ,EAAKV,EAAU3Y,EAAImZ,EAAWnZ,EAC9BsZ,EAAKX,EAAUJ,KAAOY,EAAWZ,KACvChZ,KAAKqZ,SAAW,IAAItB,EAAa,IAAPgC,EAAW,EAAIF,GAAME,EAAK,IAAY,IAAPA,EAAW,EAAID,GAAMC,EAAK,KAC/E/Z,KAAKuZ,mBACL7W,qBAAqB1C,KAAKuZ,kBAC1BvZ,KAAKuZ,sBAAmB5W,GAE5B3C,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKqO,KACtD,CACD,IAAA2L,GACQha,KAAKuZ,mBACL7W,qBAAqB1C,KAAKuZ,kBAC1BvZ,KAAKuZ,sBAAmB5W,GAE5B3C,KAAKmZ,OAAS,EACjB,CACD,IAAA9K,GACI,GAAInN,KAAKI,IAAItB,KAAKqZ,SAAS7Y,GAAK,GAAKU,KAAKI,IAAItB,KAAKqZ,SAAS5Y,GAAK,EAG7D,OAFAT,KAAKuZ,sBAAmB5W,OACxB3C,KAAKmZ,OAAS,IAGlBnZ,KAAKoZ,UAAU5Y,GAAKR,KAAKqZ,SAAS7Y,EAClCR,KAAKoZ,UAAU3Y,GAAKT,KAAKqZ,SAAS5Y,EAClCT,KAAKqZ,SAAS7Y,GAAK,GACnBR,KAAKqZ,SAAS5Y,GAAK,GACnBT,KAAKkZ,SAASlZ,KAAKoZ,UAAUjS,SAC7BnH,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKqO,KACtD,ECnDE,MAAM4L,EACT,WAAApa,CAAYyH,EAAK4O,EAAKgD,GAClBlZ,KAAKka,WAAY,EACjBla,KAAKsH,IAAMA,EACXtH,KAAKkW,IAAMjS,EAAMM,iBAAiB2R,GAClClW,KAAKma,kBAAoBnT,KAAGoT,WAC5Bpa,KAAKqa,QAAU,IAAIpB,EAAQjZ,KAAKsa,OAAOhB,KAAKtZ,OAC5CA,KAAKkZ,SAAWA,EAChBlZ,KAAKua,QAAUva,KAAKsH,IACpBtH,KAAKwa,QAAUxa,KAAKkW,IACpBlW,KAAKya,gBAAkBxW,EAAMM,iBAAiBmW,OAAOC,cAAgB,EACrE3a,KAAK4a,SAAW,IAAI9U,EAAY,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,IAC7E9F,KAAK6a,UAAY,CAAE/a,MAAO,EAAKC,OAAQ,GACvCC,KAAK8a,cAAgB,IAAI/C,EAAM,EAAK,EACvC,CACD,OAAAvV,GACIxC,KAAKqa,QAAQ7X,SAChB,CACD,eAAIuY,GACA,MAAMlU,EAAaT,EAAEA,GAACM,UAAUN,EAAAA,GAAGO,MAAM3G,KAAKsH,IAAInB,GAAInG,KAAKsH,IAAIrB,SACzD+U,EAAY,IAAIxC,EAAO3R,EAAY,CAAC,EAAK,EAAK,GAAM7G,KAAKsH,IAAItB,KAC7DiV,EAASjU,KAAGoT,WAClBpT,EAAEA,GAAC4B,SAASqS,EAAQD,EAAUnC,oBAAqBoC,GACnDjU,EAAEA,GAAC4B,SAASqS,EAAQjb,KAAKma,kBAAmBc,GAC5CjU,EAAEA,GAAC4B,SAASqS,EAAQD,EAAUlC,oBAAqBmC,GACnD,MAAMhV,EAASe,EAAAA,GAAGkU,mBAAmBD,EAAQjb,KAAKsH,IAAIrB,QAChDD,EAAMhG,KAAKsH,IAAItB,IACfG,EAAKa,EAAAA,GAAGkU,mBAAmBD,EAAQjb,KAAKsH,IAAInB,IAClD,OAAO,IAAIL,EAAYG,EAAQD,EAAKG,EACvC,CACD,KAAA0Q,GACI7W,KAAKsH,IAAMtH,KAAKua,QAAQpT,QACxBnH,KAAKkW,IAAMlW,KAAKwa,OACnB,CACD,KAAArG,CAAMsF,EAAO0B,GACTnb,KAAKka,WAAY,EACjBla,KAAK4a,SAAW5a,KAAKsH,IACrBtH,KAAK6a,UAAYM,EACjBnb,KAAK8a,cAAgBrB,EACrBzZ,KAAKqa,QAAQL,MAChB,CACD,MAAAM,CAAOb,GACCzZ,KAAKka,WACLla,KAAKqa,QAAQb,MAAMC,GAEvB,MAAM2B,EAAQ,CACV5a,EAAGiZ,EAAMjZ,EAAIR,KAAK8a,cAActa,EAChCC,EAAGgZ,EAAMhZ,EAAIT,KAAK8a,cAAcra,GAE9BoZ,EAAM5V,EAAMC,WAAWkX,EAAM5a,EAAG,KAAOR,KAAK6a,UAAU/a,MAAS,GAAMoB,KAAKuD,GAAK,IAC/EqV,EAAM7V,EAAMC,WAAWkX,EAAM3a,EAAG,KAAOT,KAAK6a,UAAU9a,OAAU,GAAMmB,KAAKuD,GAC3E4W,EAAiBrU,EAAAA,GAAG4B,SAAS5B,EAAEA,GAACsB,WAAWuR,GAAK7S,EAAAA,GAAGwB,WAAWsR,IAC9DjT,EAAaT,EAAEA,GAACM,UAAUN,EAAAA,GAAGO,MAAM3G,KAAKsH,IAAInB,GAAInG,KAAKsH,IAAIrB,SACzD+U,EAAY,IAAIxC,EAAO3R,EAAY,CAAC,EAAK,EAAK,GAAM7G,KAAKsH,IAAItB,KAC7DsV,EAAatU,KAAGoT,WACtBpT,EAAEA,GAAC4B,SAAS0S,EAAYN,EAAUnC,oBAAqByC,GACvDtU,EAAAA,GAAG4B,SAAS0S,EAAYD,EAAgBC,GACxCtU,EAAEA,GAAC4B,SAAS0S,EAAYN,EAAUlC,oBAAqBwC,GACvD,MAAMrV,EAASe,EAAAA,GAAG6B,eAAeyS,EAAYtb,KAAKsH,IAAIrB,QAChDE,EAAKa,EAAAA,GAAGkU,mBAAmBI,EAAYtb,KAAKsH,IAAInB,IAClDC,KAAGO,MAAMR,EAAI,CAAC,EAAG,EAAG,IAAI,IAAM,IAC9BnG,KAAKsH,IAAIrB,OAASA,EAClBjG,KAAKsH,IAAInB,GAAKA,GAElBnG,KAAK8a,cAAgBrB,EACrBzZ,KAAKkZ,UACR,CACD,GAAAqC,CAAI9B,EAAOY,GACPra,KAAKka,WAAY,EACbG,IACAra,KAAKqa,QAAQb,MAAMC,GACnBzZ,KAAKqa,QAAQlG,QAEpB,CACD,WAAAwG,CAAYlX,EAAO+X,EAAMC,GACrB,MAAMd,EAAc1W,EAAMM,iBAAiBmW,OAAOC,cAAgB,EAC5De,EAAezX,EAAMM,iBAAiBd,GACtCkY,EAAc1X,EAAMM,kBAAkBiX,GACtCI,EAAe3X,EAAMM,kBAAkBkX,GACvCR,EAASjU,EAAAA,GAAGwB,UAAUvE,EAAMM,iBAAiB,KACnDyC,EAAEA,GAAC6U,QAAQZ,EAAQjb,KAAKya,gBAAiBQ,GACzCjU,EAAAA,GAAG6U,QAAQZ,EAAQS,EAAcT,GACjCjU,EAAAA,GAAG8U,QAAQb,EAAQU,EAAaV,GAChCjU,EAAAA,GAAG+U,QAAQd,EAAQW,EAAcX,GACjCjU,EAAAA,GAAG6U,QAAQZ,GAASN,EAAaM,GACjCjb,KAAKma,kBAAoBc,EACzBjb,KAAKkZ,UACR,ECnFE,MAAM8C,EACT,WAAAnc,CAAY4W,EAAW3B,EAAQ4B,EAAQuF,GACnCjc,KAAKyW,UAAYA,EACjBzW,KAAK8U,OAASA,EACd9U,KAAK0W,OAASA,EACd1W,KAAK2Q,OAAS,GACd3Q,KAAKkc,aAAe,CAAC,IACrB,MAAM5U,EAAM,IAAIxB,EAAY,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,IAEnEuV,EAAiBrU,EAAAA,GAAGwB,UAAUvE,EAAMM,iBAAiB,KAC3DyC,EAAEA,GAACkU,mBAAmBG,EAAgB/T,EAAIrB,OAAQqB,EAAIrB,QACtDe,EAAEA,GAACkU,mBAAmBG,EAAgB/T,EAAInB,GAAImB,EAAInB,IAClDnG,KAAKmc,YAAc,IAAIlC,EAAkB3S,EAJ7B,IAIuC,KAC/CtH,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QACnDpc,KAAKic,cAAc,CACf3U,IAAKtH,KAAKmc,YAAY7U,IAAIH,QAC1B+O,IAAKlW,KAAKmc,YAAYjG,KACxB,IAENlW,KAAKic,cAAgBA,EACrBjc,KAAKqc,GAAKrc,KAAK8U,OAAO3S,QACtBnC,KAAKsc,YAAcxY,EAAKyY,kBAAkBvc,KAAKqc,GAAI,CAAC,6JAAiC,iSACrFrc,KAAKwc,KAAO1Y,EAAK2Y,WAAWC,uBAAuB1c,KAAKqc,IACxDrc,KAAK2c,SAAW,CACZC,SAAU5V,EAAEA,GAACoT,WACbyC,MAAO,EACPC,eAAgBhZ,EAAKiZ,cAAc/c,KAAKqc,GAAI,CACxCpW,OAAQjG,KAAKqc,GAAGW,iBAChBC,OAAQjd,KAAKqc,GAAGa,OAChBpd,MAAO,EACPC,OAAQ,IAEZod,UAAWrZ,EAAKiZ,cAAc/c,KAAKqc,GAAI,CACnCpW,OAAQjG,KAAKqc,GAAGW,iBAChBC,OAAQjd,KAAKqc,GAAGa,OAChBpd,MAAO,EACPC,OAAQ,KAGhBC,KAAKoc,OAASpc,KAAKoc,OAAO9C,KAAKtZ,KAClC,CACD,OAAAwC,GACIxC,KAAKmc,YAAY3Z,UACbxC,KAAKuZ,mBACL7W,qBAAqB1C,KAAKuZ,kBAC1BvZ,KAAKuZ,sBAAmB5W,EAE/B,CACD,IAAAC,GACI5C,KAAK8U,OAAOlS,OACZ5C,KAAKyW,UAAU1U,UAAUC,IAAI,6BAChC,CACD,IAAAe,GACI/C,KAAK8U,OAAO/R,OACZ/C,KAAKyW,UAAU1U,UAAU6U,OAAO,6BACnC,CACD,OAAItP,GACA,OAAOtH,KAAKmc,YAAY7U,GAC3B,CACD,OAAIA,CAAIA,GACAtH,KAAKmc,YAAY7U,IAAItB,IAAI4L,OAAM,CAACzN,EAAGoL,IAAMpL,IAAMmD,EAAItB,IAAIuJ,MAAOvP,KAAKmc,YAAY7U,IAAIrB,OAAO2L,OAAM,CAACzN,EAAGoL,IAAMpL,IAAMmD,EAAIrB,OAAOsJ,MAAOvP,KAAKmc,YAAY7U,IAAInB,GAAGyL,OAAM,CAACzN,EAAGoL,IAAMpL,IAAMmD,EAAInB,GAAGoJ,OAG3LvP,KAAKmc,YAAY7U,IAAMA,EAAIH,QAC3BnH,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QACtD,CACD,OAAIlG,GACA,OAAOjS,EAAMS,iBAAiB1E,KAAKmc,YAAYjG,IAClD,CACD,OAAIA,CAAIA,GACAlW,KAAKmc,YAAYjG,MAAQA,IAG7BlW,KAAKmc,YAAYjG,IAAMjS,EAAMM,iBAAiB2R,GAC9ClW,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QACtD,CACD,UAAM3H,CAAKzL,EAAUsI,EAAUuF,EAAO1T,GAClC,IAAI2Q,EAAUjG,QAAQY,UACtB,MAAMqI,EAAe5G,KAAKC,UAAUnH,GAChC8N,IAAiB9W,KAAK8W,aACtBhD,EAAUA,EAAQzG,MAAK,KACnBrN,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QAC5CvO,QAAQY,cAInBzO,KAAK2Q,OAAS,GACd3Q,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QACnDtI,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK0W,OAAOzD,mBAAmBjK,GAAUqE,MAAKsD,IACvE3Q,KAAK2Q,OAASA,EACd7M,EAAKiZ,cAAc/c,KAAKqc,GAAI,CACxBpW,OAAQjG,KAAKqc,GAAGW,iBAChBtZ,IAAK1D,KAAKqc,GAAGe,qBACbH,OAAQjd,KAAKqc,GAAGa,OAChBG,cAAe,CAACrd,KAAKqc,GAAGiB,4BAA6Btd,KAAKqc,GAAGkB,4BAA6Bvd,KAAKqc,GAAGmB,4BAA6Bxd,KAAKqc,GAAGoB,4BAA6Bzd,KAAKqc,GAAGqB,4BAA6B1d,KAAKqc,GAAGsB,6BACjN9K,IAAKlC,IACN,CAACiN,EAAKC,KACDD,IAGA/G,GACA7W,KAAKmc,YAAYtF,QAErB7W,KAAK2c,SAASE,MAAQ1Z,EAAO,EAAM,EACnCnD,KAAK2c,SAASG,eAAiB9c,KAAK2c,SAASQ,UAC7Cnd,KAAK2c,SAASQ,UAAYU,EAC1B7d,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QAAO,GAC5D,OAGV,MAAMrF,EAAe7G,KAAKC,UAAUmB,GAapC,OAZIwF,IAAiB9W,KAAK8W,cAAgBC,IAAiB/W,KAAK+W,eACxDzF,EAAS9K,OACTsN,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK0W,OAAOrB,mBAAmBrM,EAAUsI,GAAUjE,MAAKiE,IACjFtR,KAAKkc,aAAe5K,CAAQ,MAIhCtR,KAAKkc,aAAe,CAAC,KAG7Blc,KAAK+W,aAAeA,EACpB/W,KAAK8W,aAAeA,EACbhD,CACV,CACD,UAAMkD,CAAKhO,EAAUzI,GACjB,MAAMT,EAAQE,KAAK8U,OAAOlT,QAAQkc,YAC5B/d,EAASC,KAAK8U,OAAOlT,QAAQmc,aAC7BC,EAAU,CAAC,EAAK,EAAIzd,EAASC,EAAKV,EAAO,EAAK,EAAIS,EAASE,EAAKV,GAChEke,EAAU7X,EAAAA,GAAGM,UAAUM,EAAAA,GAAG6B,eAAe7I,KAAKke,0BAA2B,CAACF,EAAQ,GAAIA,EAAQ,GAAI,KAClGtc,EAAMR,KAAKQ,IAAQR,KAAKI,IAAI2c,EAAQ,IAAK/c,KAAKI,IAAI2c,EAAQ,IAAK/c,KAAKI,IAAI2c,EAAQ,KACtF,IAAIhY,EAAS,GAETA,EADA/E,KAAKI,IAAI2c,EAAQ,MAAQvc,EAChBuc,EAAQ,GAAK,EAAI,OAAS,OAE9B/c,KAAKI,IAAI2c,EAAQ,MAAQvc,EACrBuc,EAAQ,GAAK,EAAI,OAAS,OAG1BA,EAAQ,GAAK,EAAI,OAAS,OAEvC,IAAIlP,EAAI,EACJE,EAAI,EACJ/I,EAAO,GACX,OAAQD,GACJ,IAAK,OACD8I,IAAMkP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrChP,IAAMgP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrC/X,EAAO,QACP,MACJ,IAAK,OACD6I,GAAKkP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACpChP,IAAMgP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrC/X,EAAO,OACP,MACJ,IAAK,OACD6I,GAAKkP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACpChP,GAAKgP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACpC/X,EAAO,KACP,MACJ,IAAK,OACD6I,GAAKkP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACpChP,IAAMgP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrC/X,EAAO,OACP,MACJ,IAAK,OACD6I,GAAKkP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACpChP,IAAMgP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrC/X,EAAO,QACP,MACJ,IAAK,OACD6I,IAAMkP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrChP,IAAMgP,EAAQ,GAAKA,EAAQ,GAAK,GAAK,EACrC/X,EAAO,OAGf,MAAMiY,EAAM,CACR3d,EAAGU,KAAKC,MAAM4N,EAAI7N,KAAKQ,IAAIsH,EAASyD,WAAW3M,MAAOkJ,EAASyD,WAAW1M,SAC1EU,EAAGS,KAAKC,MAAM8N,EAAI/N,KAAKQ,IAAIsH,EAASyD,WAAW3M,MAAOkJ,EAASyD,WAAW1M,UAE9E,OAAOC,KAAK0W,OAAOhB,eAAe1M,EAAUmV,EAAKjY,EACpD,CACD,QAAAoL,GACI,IAAI3H,EAAIM,EACR,MAAMmU,EAAS,GACf,GAAiC,IAA7Bpe,KAAKkc,aAAa1V,OAClB,MAAO,GAEX,MAAM6X,EAAqG,QAArFpU,EAAqC,QAA/BN,EAAK3J,KAAKkc,aAAa,UAAuB,IAAPvS,OAAgB,EAASA,EAAGnD,cAA2B,IAAPyD,EAAgBA,EAAK,EAClIiU,EAA4BlX,EAAEA,GAACC,QAAQjH,KAAKke,2BAClD,IAAK,IAAI3O,EAAI,EAAGA,EAAI8O,EAAc9O,IAAK,CACnC,MAAM+O,EAAYte,KAAKkc,aAAaqC,WAAUjN,GAAuC,iBAA3BA,EAAS/B,GAAG4H,aACtE,IAAmB,IAAfmH,EACA,SAEJ,MAAMzM,EAAUtG,OAAOwC,OAAO,CAAE,EAAE/N,KAAKkc,aAAaoC,GAAW/O,IACzDR,EAAI8C,EAAQqF,WAAW1W,EAAIR,KAAK2Q,OAAO,GAAG7Q,MAC1CmP,EAAI4C,EAAQqF,WAAWzW,EAAIT,KAAK2Q,OAAO,GAAG5Q,OAChD,IAAIye,EAAK,EACLC,EAAK,EACLC,EAAK,EACT,OAAQJ,GACJ,KAAK,EACGte,KAAKsH,IAAIrB,OAAO,GAAK,IACrB4L,EAAQsF,WAAa,gBAEzBqH,EAAK,EAAIzP,EAAI,EACb0P,EAAK,EAAI,EAAIxP,EACbyP,EAAK,EACL,MACJ,KAAK,EACG1e,KAAKsH,IAAIrB,OAAO,GAAK,IACrB4L,EAAQsF,WAAa,gBAEzBqH,EAAK,EACLC,EAAK,EAAI,EAAIxP,EACbyP,EAAK,EAAI,EAAI3P,EACb,MACJ,KAAK,EACG/O,KAAKsH,IAAIrB,OAAO,GAAK,IACrB4L,EAAQsF,WAAa,gBAEzBqH,EAAK,EAAI,EAAIzP,EACb0P,EAAK,EAAI,EAAIxP,EACbyP,EAAK,EACL,MACJ,KAAK,EACG1e,KAAKsH,IAAIrB,OAAO,GAAK,IACrB4L,EAAQsF,WAAa,gBAEzBqH,EAAK,EACLC,EAAK,EAAI,EAAIxP,EACbyP,EAAK,EAAI3P,EAAI,EACb,MACJ,KAAK,EACG/O,KAAKsH,IAAIrB,OAAO,GAAK,IACrB4L,EAAQsF,WAAa,gBAEzBqH,EAAK,EAAIzP,EAAI,EACb0P,EAAK,EACLC,EAAK,EAAIzP,EAAI,EACb,MACJ,KAAK,EACGjP,KAAKsH,IAAIrB,OAAO,GAAK,IACrB4L,EAAQsF,WAAa,gBAEzBqH,EAAK,EAAIzP,EAAI,EACb0P,EAAK,EACLC,EAAK,EAAI,EAAIzP,EAGrB,MAAMgP,EAAU7X,EAAAA,GAAGM,UAAU,CAAC8X,EAAIC,EAAIC,IAChCV,EAAUhX,EAAEA,GAAC6B,eAAeqV,EAA2BD,GACvDne,EAAQE,KAAK8U,OAAOlT,QAAQkc,YAC5B/d,EAASC,KAAK8U,OAAOlT,QAAQmc,aAC7B7G,EAAa,CACf1W,EAAGV,EAAQ,GAAMA,GAASke,EAAQ,GAAK,GACvCvd,EAAGV,EAAS,GAAMA,GAAUie,EAAQ,GAAK,IAEvCW,EAAmB,IAAI/e,EAAWE,EAAOC,GACzCoX,EAAajX,EAASG,SAASse,EAAkBzH,GAAcrF,EAAQsF,WAAa,eAC1FiH,EAAOvI,KAAKtK,OAAOwC,OAAOxC,OAAOwC,OAAO,GAAI8D,GAAU,CAAEqF,aAAYC,eACvE,CACD,OAAOiH,CACV,CACD,QAAApV,CAASiL,EAAMzS,GACX,OAAOxB,KAAK8U,OAAOlT,QAAQqT,UAAUhB,EAAMzS,EAC9C,CACD,6BAAI0c,GACA,MAAMpe,EAAQE,KAAK8U,OAAOlT,QAAQkc,YAC5B/d,EAASC,KAAK8U,OAAOlT,QAAQmc,aAC7B9d,EAASH,EAAQC,EAASD,EAAQC,EAASA,EAASD,EACpD8e,EAAsB1e,EAASmB,uBAAuBvB,EAAOC,GAC7DmW,EAAMlW,KAAKmc,YAAYjG,KAAO0I,EAAsB3e,GACpD4e,EAAmB/e,EAAQC,EAASkE,EAAMoB,oBAAoB6Q,EAAKpW,EAAQC,EAAQ,GAAK,KAAOkE,EAAMY,oBAAoBqR,EAAKpW,EAAQC,EAAQ,GAAK,KACnJ+e,EAA0B9X,EAAAA,GAAGC,QAAQ4X,GACrCvX,EAAMtH,KAAKmc,YAAYpB,YACvBgE,EAAoB/X,KAAGE,OAAOI,EAAItB,IAAKsB,EAAIrB,OAAQqB,EAAInB,IAC7D,OAAOa,KAAG4B,SAASmW,EAAmBD,EACzC,CACD,MAAA1C,GACIpc,KAAKqc,GAAGtb,SAAS,EAAG,EAAGf,KAAKqc,GAAGvH,OAAOhV,MAAOE,KAAKqc,GAAGvH,OAAO/U,QAC5DC,KAAK2c,SAASC,SAAW5c,KAAKke,0BAC9Ble,KAAKqc,GAAG2C,WAAWhf,KAAKsc,YAAY2C,SACpCnb,EAAKob,wBAAwBlf,KAAKqc,GAAIrc,KAAKsc,YAAatc,KAAKwc,MAC7D1Y,EAAKqb,YAAYnf,KAAKsc,YAAatc,KAAK2c,UACxC7Y,EAAKsb,eAAepf,KAAKqc,GAAIrc,KAAKwc,MAC9Bxc,KAAK2c,SAASE,MAAQ,IACtB7c,KAAK2c,SAASE,MAAQ3b,KAAKwC,IAAI1D,KAAK2c,SAASE,MAAQ,IAAM,GAC3D7c,KAAKuZ,iBAAmB3V,sBAAsB5D,KAAKoc,QAE1D,CACD,WAAAhF,CAAYpI,GACRhP,KAAKyW,UAAU1U,UAAUC,IAAI,uCAC7BhC,KAAKmc,YAAYhI,MAAM6D,EAAYC,oBAAoBjJ,GAAI,CACvDlP,MAAOE,KAAKqc,GAAGvH,OAAOhV,MACtBC,OAAQC,KAAKqc,GAAGvH,OAAO/U,QAE9B,CACD,WAAAsX,CAAYrI,GACHhP,KAAKmc,YAAYjC,YAGtBla,KAAKmc,YAAY7B,OAAOtC,EAAYC,oBAAoBjJ,IACxDA,EAAEqQ,iBACL,CACD,SAAA/H,CAAUtI,GACDhP,KAAKmc,YAAYjC,YAGtBla,KAAKyW,UAAU1U,UAAU6U,OAAO,uCAChC5W,KAAKmc,YAAYZ,IAAIvD,EAAYC,oBAAoBjJ,IAAI,GAC5D,CACD,YAAAuI,CAAavI,GACJhP,KAAKmc,YAAYjC,WAGJ,IAAdlL,EAAEsQ,UACFtf,KAAKyW,UAAU1U,UAAU6U,OAAO,uCAChC5W,KAAKmc,YAAYZ,IAAIvD,EAAYC,oBAAoBjJ,IAAI,GAEhE,CACD,YAAAwI,CAAaxI,GACThP,KAAKyW,UAAU1U,UAAUC,IAAI,uCAC7BhC,KAAKmc,YAAYhI,MAAM6D,EAAYI,oBAAoBpJ,GAAI,CACvDlP,MAAOE,KAAKqc,GAAGvH,OAAOhV,MACtBC,OAAQC,KAAKqc,GAAGvH,OAAO/U,QAE9B,CACD,WAAA0X,CAAYzI,GACHhP,KAAKmc,YAAYjC,YAGtBla,KAAKmc,YAAY7B,OAAOtC,EAAYI,oBAAoBpJ,IACxDA,EAAEqQ,iBACL,CACD,UAAA3H,CAAW1I,GACFhP,KAAKmc,YAAYjC,YAGtBla,KAAKyW,UAAU1U,UAAU6U,OAAO,uCAChC5W,KAAKmc,YAAYZ,IAAIvD,EAAYI,oBAAoBpJ,IAAI,GAC5D,CACD,mBAAA2I,CAAoB3I,GAChBhP,KAAKmc,YAAYxB,YAAY3L,EAAEvL,MAAOuL,EAAEwM,KAAMxM,EAAEyM,MACnD,EC/VE,MAAM8D,EACT,WAAA1f,CAAYU,EAAU6N,EAAQoR,EAAMnR,EAAM6K,GACtClZ,KAAKka,WAAY,EACjBla,KAAKO,SAAWA,EAChBP,KAAKoO,OAASA,EACdpO,KAAKwf,KAAOA,EACZxf,KAAKqO,KAAOA,EACZrO,KAAKkZ,SAAWA,EAChBlZ,KAAKqa,QAAU,IAAIpB,EAAQjZ,KAAKsa,OAAOhB,KAAKtZ,OAC5CA,KAAKyf,aAAezf,KAAKO,SACzBP,KAAK0f,cAAgB,CAAElf,EAAG,EAAKC,EAAG,GAClCT,KAAK2f,WAAa,IAAI5H,EAAM,EAAK,GACjC/X,KAAK6a,UAAY,CAAE/a,MAAO,EAAKC,OAAQ,GACvCC,KAAK4f,WAAa,GAClB5f,KAAK6f,iBAAmB,EAC3B,CACD,OAAArd,GACIxC,KAAKqa,QAAQ7X,SAChB,CACD,KAAAqU,GACI7W,KAAKO,SAAWP,KAAKyf,YACxB,CACD,iBAAIK,GACA,OAAO9f,KAAKoO,OAASpO,KAAKO,SAASE,EAAIT,KAAKO,SAASC,CACxD,CACD,iBAAIsf,CAAcvL,GACd,GAAIvU,KAAK8f,gBAAkBvL,EACvB,OAEJ,MAAMuL,EAAgB9f,KAAKqO,KAAOpK,EAAMU,IAAI4P,EAAOvU,KAAKoO,OAASpO,KAAKwf,MAAQte,KAAKQ,IAAI,EAAGR,KAAKwC,IAAI6Q,EAAOvU,KAAKoO,OAASpO,KAAKwf,OAC7Hxf,KAAKO,SAASC,EAAIyD,EAAMU,IAAImb,EAAe9f,KAAKoO,QAChDpO,KAAKO,SAASE,EAAIS,KAAK0D,MAAMkb,EAAgB9f,KAAKoO,OACrD,CACD,KAAA+F,CAAMsF,EAAO0B,GACTnb,KAAKka,WAAY,EACjBla,KAAK0f,cAAgBnU,OAAOwC,OAAO,CAAA,EAAI/N,KAAKO,UAC5CP,KAAK2f,WAAalG,EAClBzZ,KAAK6a,UAAYM,EACjBnb,KAAK4f,WAAa,GAClB5f,KAAKqa,QAAQL,MAChB,CACD,MAAAM,CAAOb,GACCzZ,KAAKka,WACLla,KAAKqa,QAAQb,MAAMC,GAEvBzZ,KAAK4f,WAAW/J,KAAK,CAAErV,EAAGiZ,EAAMjZ,EAAGC,EAAGgZ,EAAMhZ,IAC5CT,KAAK4f,WAAWG,OAAO,EAAG/f,KAAK4f,WAAWpZ,OAASxG,KAAK6f,kBACxD,MAAMG,EAAmBC,EAAU,QAACC,OAAOlgB,KAAK4f,WAAW3U,KAAIc,GAAK,CAACA,EAAEvL,EAAGuL,EAAEtL,MAE5E,GAAIS,KAAKI,IAAI0e,EAAiBG,SAAS,IAAM,EAAG,CAC5C,MAAMtG,EAAM5V,EAAMC,WAAWuV,EAAMjZ,EAAIR,KAAK2f,WAAWnf,EAAG,KAAOR,KAAK6a,UAAU/a,OAAUE,KAAKoO,OAAS,GACxG,IAAIgS,EAAYpgB,KAAK0f,cAAclf,EAAIU,KAAKC,MAAM0Y,GAClDuG,EAAYpgB,KAAKqO,KAAOpK,EAAMU,IAAIyb,EAAWpgB,KAAKoO,QAAUlN,KAAKQ,IAAI,EAAGR,KAAKwC,IAAI0c,EAAWpgB,KAAKoO,OAAS,IACtGgS,IAAcpgB,KAAKO,SAASC,IAC5BR,KAAKO,SAASC,EAAI4f,EAClBpgB,KAAKkZ,YAET,MAAMmH,EAAOnf,KAAKwC,OAAO1D,KAAK4f,WAAW3U,KAAIc,GAAKA,EAAEvL,KACvCU,KAAKQ,OAAO1B,KAAK4f,WAAW3U,KAAIc,GAAKA,EAAEvL,KACzC6f,EAXK,KAYZrgB,KAAK2f,WAAWlf,EAAIgZ,EAAMhZ,EAC1BT,KAAK0f,cAAcjf,EAAIT,KAAKO,SAASE,EAE5C,KACI,CACD,MAAMqZ,EAAM7V,EAAMC,WAAWuV,EAAMhZ,EAAIT,KAAK2f,WAAWlf,EAAG,KAAOT,KAAK6a,UAAU9a,QAAWC,KAAKwf,KAAO,GACvG,IAAIc,EAAYtgB,KAAK0f,cAAcjf,EAAIS,KAAKC,MAAM2Y,GAClDwG,EAAYpf,KAAKQ,IAAI,EAAGR,KAAKwC,IAAI4c,EAAWtgB,KAAKwf,KAAO,IACpDc,IAActgB,KAAKO,SAASE,IAC5BT,KAAKO,SAASE,EAAI6f,EAClBtgB,KAAKkZ,YAET,MAAMqH,EAAOrf,KAAKwC,OAAO1D,KAAK4f,WAAW3U,KAAIc,GAAKA,EAAEtL,KACvCS,KAAKQ,OAAO1B,KAAK4f,WAAW3U,KAAIc,GAAKA,EAAEtL,KACzC8f,EA1BK,KA2BZvgB,KAAK2f,WAAWnf,EAAIiZ,EAAMjZ,EAC1BR,KAAK0f,cAAclf,EAAIR,KAAKO,SAASC,EAE5C,CACJ,CACD,GAAA+a,CAAI9B,EAAOY,GACPra,KAAKka,WAAY,EACbG,IACAra,KAAKqa,QAAQb,MAAMC,GACnBzZ,KAAKqa,QAAQlG,QAEpB,ECtFE,MAAMqM,EACT,WAAA3gB,CAAY4W,EAAW3B,EAAQ4B,EAAQuF,GACnCjc,KAAKyW,UAAYA,EACjBzW,KAAK8U,OAASA,EACd9U,KAAK0W,OAASA,EACd1W,KAAK2Q,OAAS,GACd3Q,KAAKoO,OAAS,GACdpO,KAAKkc,aAAe,CAAC,IACrBlc,KAAKmc,YAAc,IAAIoD,EAAoB,CAAE/e,EAAG,EAAGC,EAAG,GAAK,EAAG,GAAG,GAAO,KACpET,KAAK8U,OAAO7R,KAAKjD,KAAKwD,OAAO,EAAM,IACnCxD,KAAKic,cAAc,CACf1b,SAAUP,KAAKmc,YAAY2D,eAC7B,IAEN9f,KAAKic,cAAgBA,CACxB,CACD,OAAAzZ,GACQxC,KAAKuZ,mBACL7W,qBAAqB1C,KAAKuZ,kBAC1BvZ,KAAKuZ,sBAAmB5W,EAE/B,CACD,IAAAC,GACI5C,KAAK8U,OAAOlS,MAAK,GACjB5C,KAAKyW,UAAU1U,UAAUC,IAAI,+BAChC,CACD,IAAAe,GACI/C,KAAK8U,OAAO/R,MAAK,GACjB/C,KAAKyW,UAAU1U,UAAU6U,OAAO,+BACnC,CACD,UAAM6J,CAAKlgB,GACP,OAAO,IAAIsN,SAAQY,IACf,IAAI0P,EAAMne,KAAKmc,YAAY2D,cAC3B,MAAMY,EAAW,KACb,GAAI1gB,KAAKmc,YAAY2D,gBAAkBvf,EACnCkO,QAEC,CACD,IAAIkS,EAAOxC,EAAM5d,GAAY,EAAI,EAC7BP,KAAKmc,YAAY9N,MACbrO,KAAKmc,YAAY/N,OAAS+P,EAAM5d,EAAWW,KAAKI,IAAIf,EAAW4d,KAC/DwC,IAAS,GAGjBxC,GAAO,GAAMwC,EACb3gB,KAAKO,SAAWW,KAAK0D,MAAMuZ,GAC3Bne,KAAKuZ,iBAAmB3V,sBAAsB8c,EACjD,GAEL1gB,KAAKuZ,iBAAmB3V,sBAAsB8c,EAAS,GAE9D,CACD,YAAIngB,GACA,OAAOP,KAAKmc,YAAY2D,aAC3B,CACD,YAAIvf,CAASA,GACTP,KAAKmc,YAAY2D,cAAgBvf,EACjCP,KAAK8U,OAAO7R,KAAKjD,KAAKwD,OAAO,EAAM,GACtC,CACD,SAAIA,GACA,OAAOxD,KAAK2Q,OAAO3Q,KAAKmc,YAAY2D,cACvC,CACD,UAAMrL,CAAKzL,EAAUsI,EAAUuF,EAAO1T,GAClC,IAAI2Q,EAAUjG,QAAQY,UAClBoI,GACA7W,KAAKmc,YAAYtF,QAErB,MAAMC,EAAe5G,KAAKC,UAAUnH,GAChC8N,IAAiB9W,KAAK8W,cAAgB9W,KAAKwD,MAC3CsQ,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK8U,OAAO7R,KAAKjD,KAAKwD,MAAOL,EAAM,QAGhEnD,KAAK2Q,OAAS,GACdmD,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK0W,OAAOpD,qBAAqBtK,EAAUhJ,KAAKmc,YAAY2D,eAAezS,MAAK8F,IACzG,MAAM/E,EAAS+E,EAAS3M,OAkBxB,OAjBAxG,KAAK2Q,OAAS,IAAIuD,MAAM9F,GACxBpO,KAAKmc,YAAY/N,OAASpF,EAASzB,KAAK6G,QAAUpO,KAAKoO,OACvDpO,KAAKmc,YAAYqD,KAAOpR,EAASpO,KAAKmc,YAAY/N,OAClDpO,KAAKmc,YAAY9N,OAASrF,EAASzB,KAAK8G,KACpCwI,GACA7W,KAAKmc,YAAYtF,QAErB1D,EAASyN,SAAQ,CAAC9M,EAASvE,KACvBuE,EACKzG,MAAKnK,IACNlD,KAAK2Q,OAAOpB,GAAKrM,EACbA,IAAQlD,KAAKwD,OACbxD,KAAK8U,OAAO7R,KAAKjD,KAAKwD,MAAOL,EAAM,IACtC,IAEAqR,OAAM,QAAU,IAElBrB,EAASnT,KAAKmc,YAAY2D,eAAezS,MAAK,IAAMQ,QAAQY,WAAU,OAGrF,MAAMsI,EAAe7G,KAAKC,UAAUmB,GAapC,OAZIwF,IAAiB9W,KAAK8W,cAAgBC,IAAiB/W,KAAK+W,eACxDzF,EAAS9K,OACTsN,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK0W,OAAOpB,qBAAqBtM,EAAUsI,GAAUjE,MAAKiE,IACnFtR,KAAKkc,aAAe5K,CAAQ,MAIhCtR,KAAKkc,aAAe,CAAC,KAG7Blc,KAAK+W,aAAeA,EACpB/W,KAAK8W,aAAeA,EACbhD,CACV,CACD,UAAMkD,CAAKhO,EAAUzI,GACjB,MAAMD,EAAa,IAAIV,EAAWoJ,EAASyD,WAAW3M,MAAOkJ,EAASyD,WAAW1M,QAC3EkX,EAAsB/W,EAASkB,UAAUd,EAAYN,KAAK8U,OAAOxU,WAAYN,KAAK8U,OAAOpU,IAAKH,GACpG,OAAOP,KAAK0W,OAAOlB,iBAAiBxM,EAAUiO,EAAqBjX,KAAKO,SAAUP,KAAKoO,OAC1F,CACD,QAAAkD,CAAShR,GAEL,OADiBN,KAAKkc,aAAalc,KAAKmc,YAAY2D,gBAAkB,IAEjE7U,KAAI4G,GAAYtG,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI8D,GAAU,CAAEqF,WAAYhX,EAASY,QAAQR,EAAYN,KAAK8U,OAAOxU,WAAYN,KAAK8U,OAAOpU,IAAKmR,EAAQqF,gBACtJjM,KAAI4G,GAAYtG,OAAOwC,OAAOxC,OAAOwC,OAAO,CAAA,EAAI8D,GAAU,CAAEsF,WAAYjX,EAASG,SAASL,KAAK8U,OAAOxU,WAAYuR,EAAQqF,YAAcrF,EAAQsF,WAAa,kBACrK,CACD,QAAAnO,CAASiL,EAAMzS,GACX,OAAOxB,KAAK8U,OAAOlT,QAAQqT,UAAUhB,EAAMzS,EAC9C,CACD,WAAA4V,CAAYpI,GACRhP,KAAKyW,UAAU1U,UAAUC,IAAI,yCAC7BhC,KAAKmc,YAAYhI,MAAM6D,EAAYC,oBAAoBjJ,GAAI,CACvDlP,MAAOE,KAAK8U,OAAOlT,QAAQ9B,MAC3BC,OAAQC,KAAK8U,OAAOlT,QAAQ7B,QAEnC,CACD,WAAAsX,CAAYrI,GACHhP,KAAKmc,YAAYjC,YAGtBla,KAAKmc,YAAY7B,OAAOtC,EAAYC,oBAAoBjJ,IACxDA,EAAEqQ,iBACL,CACD,SAAA/H,CAAUtI,GACDhP,KAAKmc,YAAYjC,YAGtBla,KAAKyW,UAAU1U,UAAU6U,OAAO,yCAChC5W,KAAKmc,YAAYZ,IAAIvD,EAAYC,oBAAoBjJ,IAAI,GAC5D,CACD,YAAAuI,CAAavI,GACJhP,KAAKmc,YAAYjC,WAGJ,IAAdlL,EAAEsQ,UACFtf,KAAKyW,UAAU1U,UAAU6U,OAAO,yCAChC5W,KAAKmc,YAAYZ,IAAIvD,EAAYC,oBAAoBjJ,IAAI,GAEhE,CACD,YAAAwI,CAAaxI,GACThP,KAAKyW,UAAU1U,UAAUC,IAAI,yCAC7BhC,KAAKmc,YAAYhI,MAAM6D,EAAYI,oBAAoBpJ,GAAI,CACvDlP,MAAOE,KAAK8U,OAAOlT,QAAQ9B,MAC3BC,OAAQC,KAAK8U,OAAOlT,QAAQ7B,QAEnC,CACD,WAAA0X,CAAYzI,GACHhP,KAAKmc,YAAYjC,YAGtBla,KAAKmc,YAAY7B,OAAOtC,EAAYI,oBAAoBpJ,IACxDA,EAAEqQ,iBACL,CACD,UAAA3H,CAAW1I,GACFhP,KAAKmc,YAAYjC,YAGtBla,KAAKyW,UAAU1U,UAAU6U,OAAO,yCAChC5W,KAAKmc,YAAYZ,IAAIvD,EAAYI,oBAAoBpJ,IAAI,GAC5D,CACD,mBAAA2I,CAAoB3I,GAAM,MClLnB6R,EAEIC,EAQAC,EASAC,GCpBf,SAAqBC,EAAKC,QACX,IAARA,IAAiBA,EAAM,CAAA,GAC5B,IAAIC,EAAWD,EAAIC,SAEnB,GAAKF,GAA2B,oBAAbpf,SAAnB,CAEA,IAAIuf,EAAOvf,SAASuf,MAAQvf,SAAS+H,qBAAqB,QAAQ,GAC9D3H,EAAQJ,SAASC,cAAc,SACnCG,EAAMgS,KAAO,WAEI,QAAbkN,GACEC,EAAKC,WACPD,EAAKE,aAAarf,EAAOmf,EAAKC,YAKhCD,EAAKG,YAAYtf,GAGfA,EAAMuf,WACRvf,EAAMuf,WAAWC,QAAUR,EAE3Bhf,EAAMsf,YAAY1f,SAAS6f,eAAeT,GAnBY,CAqB1D,6wBDzBWJ,QAAQA,aAAA,EACRA,EAuBRA,QAAOA,UAAKA,gBAAU,CAAA,IArBVC,EAMeD,EAAQC,uBAAyBD,EAAQC,qBAAuB,CAAA,IALxD,QAAI,UAClCA,EAA0B,IAAI,MAC9BA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA4B,MAAI,SAGzBC,EAOkBF,EAAQE,0BAA4BF,EAAQE,wBAA0B,CAAA,IANjE,KAAI,OAClCA,EAA8B,KAAI,OAClCA,EAAgC,OAAI,SACpCA,EAA8B,KAAI,OAClCA,EAAmC,UAAI,YACvCA,EAA6B,IAAI,OAG1BC,EAGSH,EAAQG,iBAAmBH,EAAQG,eAAiB,CAAA,IAF7C,OAAI,SAC3BA,EAAiC,iBAAI,kCEVtC,MACH,WAAAnhB,CAAY4W,EAAWkL,GACnB3hB,KAAK4hB,YAAc5hB,KAAK4hB,YAAYtI,KAAKtZ,MACzCA,KAAK2X,oBAAsB3X,KAAK2X,oBAAoB2B,KAAKtZ,MACzDA,KAAK6hB,SAAW7hB,KAAK6hB,SAASvI,KAAKtZ,MACnCA,KAAKoX,YAAcpX,KAAKoX,YAAYkC,KAAKtZ,MACzCA,KAAKqX,YAAcrX,KAAKqX,YAAYiC,KAAKtZ,MACzCA,KAAKsX,UAAYtX,KAAKsX,UAAUgC,KAAKtZ,MACrCA,KAAKuX,aAAevX,KAAKuX,aAAa+B,KAAKtZ,MAC3CA,KAAKwX,aAAexX,KAAKwX,aAAa8B,KAAKtZ,MAC3CA,KAAKyX,YAAczX,KAAKyX,YAAY6B,KAAKtZ,MACzCA,KAAK0X,WAAa1X,KAAK0X,WAAW4B,KAAKtZ,MACvCA,KAAKwS,YAAcxS,KAAKwS,YAAY8G,KAAKtZ,MACzCA,KAAKyS,eAAiBzS,KAAKyS,eAAe6G,KAAKtZ,MAC/CA,KAAK0S,UAAY1S,KAAK0S,UAAU4G,KAAKtZ,MACrCA,KAAK8hB,YAAc9hB,KAAK8hB,YAAYxI,KAAKtZ,MACzCA,KAAK+hB,iBAAmB/hB,KAAK+hB,iBAAiBzI,KAAKtZ,MACnDA,KAAKgiB,oBAAsBhiB,KAAKgiB,oBAAoB1I,KAAKtZ,MACzDA,KAAKiiB,sBAAwBjiB,KAAKiiB,sBAAsB3I,KAAKtZ,MAC7DA,KAAK2hB,QAAUpW,OAAOwC,OAAO,CAAE3C,OAAQ,YAAa4G,IAAK,KAAMtR,IAAK,QAAS8C,MAAO,CAAE,EAAE6F,MAAO,CAAA,EAAI6Y,OAAQ,GAAIC,SAAU,CAAE,EAAEC,OAAQ,CAAA,GAAMT,GAC3I3hB,KAAK2hB,QAAQS,OAAS7W,OAAOwC,OAAO,CAAEyE,YAAa,OAAWC,eAAgB,OAAWC,UAAW,OAAWoP,YAAa,OAAW7F,cAAe,OAAW+F,oBAAqB,OAAWC,sBAAuB,OAAWF,iBAAkB,QAAaJ,EAAQS,QAC1QpiB,KAAK2hB,QAAQS,OAAON,YAAcO,EAAQ,QAACriB,KAAK2hB,QAAQS,OAAON,YAAa,IAC5E9hB,KAAKyW,UAAYA,EACjBzW,KAAKyW,UAAU1U,UAAUC,IAAI,uBAC7BhC,KAAKsiB,eAAiB,EACtBtiB,KAAKuiB,gBAAkB,EACvBviB,KAAKwiB,SAAW,IAAI7gB,EAAS3B,KAAK2hB,QAAQjhB,KAC1CV,KAAKyW,UAAU8K,YAAYvhB,KAAKwiB,SAAS5gB,SACzC5B,KAAKyiB,SAAW,IAAI5e,EACpB7D,KAAKyW,UAAU8K,YAAYvhB,KAAKyiB,SAAS7gB,SACzC5B,KAAKqJ,MAAQ,IAAIiN,EACjBtW,KAAKyW,UAAU8K,YAAYvhB,KAAKqJ,MAAMzH,SACtC5B,KAAK0W,OAAS,IAAI3E,EAAO/R,KAAK2hB,QAAQvW,OAAQpL,KAAK2hB,QAAQ3P,IAAKhS,MAChEA,KAAKM,WAAa,IAAIV,EAAW,EAAG,GACpCI,KAAKyM,WAAa,CACd3M,MAAO,EACPC,OAAQ,EACR6M,cAAc,EACdC,cAAe,GAEnB7M,KAAK+M,QAAU,CACXE,OAAQ,OACRzL,QAAS,IAEbxB,KAAKsR,SAAW,GAChBtR,KAAK0iB,YAAc,IAAIlM,EAAYC,EAAWzW,KAAKwiB,SAAUxiB,KAAK0W,QAClE1W,KAAK2iB,YAAc,IAAI/K,EAAYnB,EAAWzW,KAAKqJ,MAAOrJ,KAAK0W,QAC/D1W,KAAK4iB,eAAiB,IAAIpC,EAAe/J,EAAWzW,KAAKwiB,SAAUxiB,KAAK0W,OAAQ1W,KAAKiiB,uBACjFjiB,KAAKyiB,SAAStgB,UACdnC,KAAK6iB,aAAe,IAAI7G,EAAavF,EAAWzW,KAAKyiB,SAAUziB,KAAK0W,OAAQ1W,KAAKgiB,sBAErFhiB,KAAK8iB,OAAS9iB,KAAK0iB,YACnB1iB,KAAK+iB,aAAc,EACnB/iB,KAAKyW,UAAU1C,iBAAiB,YAAa/T,KAAKoX,aAClDpX,KAAKyW,UAAU1C,iBAAiB,aAAc/T,KAAKuX,cACnDvX,KAAKyW,UAAU1C,iBAAiB,aAAc/T,KAAKwX,cACnD3V,SAASkS,iBAAiB,YAAa/T,KAAKqX,YAAa,CAAE2L,SAAS,IACpEnhB,SAASkS,iBAAiB,UAAW/T,KAAKsX,WAC1CzV,SAASkS,iBAAiB,YAAa/T,KAAKyX,YAAa,CAAEuL,SAAS,IACpEnhB,SAASkS,iBAAiB,WAAY/T,KAAK0X,YAC3C1X,KAAKijB,WAAaZ,EAAQ,QAACriB,KAAKijB,WAAY,IAC5CjjB,KAAK6hB,SAAWQ,EAAQ,QAACriB,KAAK6hB,SAAU,KACxCje,sBAAsB5D,KAAK4hB,YAC9B,CACD,OAAApf,GACIxC,KAAKwiB,SAAShgB,UACdxC,KAAKyW,UAAU5B,oBAAoB,YAAa7U,KAAKoX,aACrDpX,KAAKyW,UAAU5B,oBAAoB,aAAc7U,KAAKuX,cACtDvX,KAAKyW,UAAU5B,oBAAoB,aAAc7U,KAAKwX,cACtD3V,SAASgT,oBAAoB,YAAa7U,KAAKqX,aAC/CxV,SAASgT,oBAAoB,UAAW7U,KAAKsX,WAC7CzV,SAASgT,oBAAoB,YAAa7U,KAAKyX,aAC/C5V,SAASgT,oBAAoB,WAAY7U,KAAK0X,YAC9C1X,KAAK+iB,aAAc,CACtB,CACD,UAAMtO,CAAKxL,EAAOia,GACd,IAAIpP,EAAUjG,QAAQY,UAkBtB,OAjBIyU,aAA+C,EAASA,EAAWna,aACnE+K,EAAUA,EAAQzG,MAAK,IAAMrN,KAAKmjB,cAAcD,EAAWna,cAE3D/I,KAAKuH,WAA8F5E,KAArFugB,aAA+C,EAASA,EAAWE,eAA+BpjB,KAAKqjB,sBAAsB7C,IAC9HxgB,KAAKuH,KAAKmJ,KACvBoD,EAAUA,EAAQzG,MAAK,IAAMrN,KAAKqjB,WAAW5C,KAAKyC,EAAWE,kBAE7DF,aAA+C,EAASA,EAAWna,aACnE+K,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK2iB,YAAY7K,UAElDhE,EAAUA,EAAQzG,MAAK,KACnBrN,KAAKiJ,MAAQiL,MAAMoP,QAAQra,GAAS,IAAIA,GAAS,CAACA,GAC3CjJ,KAAKijB,YAAW,IAASC,GAAcA,EAAWna,eAE7D+K,EAAQU,OAAMxF,IACVhP,KAAK8hB,YAAY9S,EAAE,IAEhB8E,CACV,CACD,gBAAMyP,CAAWxW,GACb/M,KAAK+M,QAAUxB,OAAOwC,OAAO,CAAE,EAAEhB,GACjC,IAAI+G,EAAUjG,QAAQY,UAKtB,OAJAqF,EAAUA,EAAQzG,MAAK,IAAMrN,KAAKijB,YAAW,GAAO,KACpDnP,EAAQU,OAAMxF,IACVhP,KAAK8hB,YAAY9S,EAAE,IAEhB8E,CACV,CACD,aAAA0P,CAAc/W,GACVzM,KAAKyM,WAAalB,OAAOwC,OAAO,CAAE,EAAEtB,GACpCzM,KAAKyM,WAAW3M,MAAQE,KAAKM,WAAWR,MACxCE,KAAKyM,WAAW1M,OAASC,KAAKM,WAAWP,OACzC,IAAI+T,EAAUjG,QAAQY,UAKtB,OAJAqF,EAAUA,EAAQzG,MAAK,IAAMrN,KAAKijB,YAAW,GAAO,KACpDnP,EAAQU,OAAMxF,IACVhP,KAAK8hB,YAAY9S,EAAE,IAEhB8E,CACV,CACD,WAAA2P,CAAYnS,GACRtR,KAAKsR,SAAWA,EAChBtR,KAAKijB,YAAW,GAAO,EAC1B,CACD,aAAMS,CAAQnc,EAAM2b,GAChB,IAAIpP,EAAUjG,QAAQY,UAsBtB,OArBIyU,aAA+C,EAASA,EAAWna,aACnE+K,EAAUA,EAAQzG,MAAK,IAAMrN,KAAKmjB,cAAcD,EAAWna,cAE3D/I,KAAKuH,WAA8F5E,KAArFugB,aAA+C,EAASA,EAAWE,eAA+BpjB,KAAKqjB,sBAAsB7C,IAC3I1M,EAAUA,EAAQzG,MAAK,IAAMrN,KAAKqjB,WAAW5C,KAAKyC,EAAWE,kBAE7DF,aAA+C,EAASA,EAAWna,aACnE+K,EAAUA,EAAQzG,MAAK,IAAMrN,KAAK2iB,YAAY7K,UAElDhE,EAAUA,EAAQzG,MAAK,KACnB,IAAIwJ,GAAQ,EAMZ,OALA7W,KAAKuH,KAAOgE,OAAOwC,OAAO,CAAE,EAAExG,GAC1BvH,KAAKuH,MAAQvH,KAAKqjB,sBAAsB7C,QAAsG7d,KAAnFugB,aAA+C,EAASA,EAAWS,cAC9H9M,GAAQ,EACR7W,KAAKqjB,WAAW9iB,SAAW2iB,EAAWS,YAEnC3jB,KAAKijB,WAAWpM,IAASqM,GAAcA,EAAWna,WAAW,IAExE+K,EAAQU,OAAMxF,IACVhP,KAAK8hB,YAAY9S,EAAE,IAEhB8E,CACV,CACD,SAAA8P,CAAUvT,GACDrQ,KAAK6iB,cAGVtX,OAAOwC,OAAO/N,KAAK6iB,aAAcxS,EACpC,CACD,WAAAwT,CAAYxT,GACR9E,OAAOwC,OAAO/N,KAAK4iB,eAAgBvS,EACtC,CACD,mBAAM8S,CAAcpa,GAChB,IAAIY,EACJ,MAAMX,EAAW,CACbC,MAAOjJ,KAAKiJ,MACZ1B,KAAM,CACFwB,UAAWA,EAAU8B,KACrBoD,OAAQlF,EAAUkF,OAClBS,SAAU3F,EAAU2F,SACpBL,KAAMtF,EAAUsF,KAChBM,QAAS5F,EAAU4F,SAEvBlC,WAAYzM,KAAKyM,WACjBM,QAAS,CACLE,OAAQ,QAMhB,OAH+B,QAAxBtD,EAAKX,EAASzB,YAAyB,IAAPoC,OAAgB,EAASA,EAAG+C,cAC/D1D,EAASzB,KAAKmF,WAAa,WAExB1M,KAAK2iB,YAAYlO,KAAKzL,GAAUqE,MAAK,IAAMQ,QAAQY,WAC7D,CACD,mBAAMqV,CAAc/a,GAChB,OAAO/I,KAAKmjB,cAAcpa,GACrBsE,MAAK,IAAMrN,KAAK2iB,YAAY7K,SAC5BtD,OAAMxF,IACPhP,KAAK8hB,YAAY9S,EAAE,GAE1B,CACD,aAAA+U,GACI/jB,KAAK2iB,YAAY5f,MACpB,CACD,UAAMiU,CAAKzW,GACP,IAAKP,KAAKiJ,MACN,MAAM,IAAIG,MAAM,gBAEpB,IAAKpJ,KAAKuH,KACN,MAAM,IAAI6B,MAAM,eAEpB,IAAKpJ,KAAKuH,KAAK0G,SAAWjO,KAAKuH,KAAKyC,YAChC,MAAM,IAAIZ,MAAM,iBAEpB,MAAMJ,EAAW,CACbC,MAAOjJ,KAAKiJ,MACZ1B,KAAMvH,KAAKuH,KACXkF,WAAYzM,KAAKyM,WACjBM,QAAS/M,KAAK+M,SAElB,aAAa/M,KAAKqjB,WAAWrM,KAAKhO,EAAUzI,EAC/C,CACD,QAAAyI,CAASiL,EAAMzS,GACX,OAAOxB,KAAKqjB,WAAWra,SAASiL,EAAMzS,EACzC,CACD,gBAAMyhB,CAAWpM,EAAO1T,GACpB,IAAKnD,KAAKiJ,QAAUjJ,KAAKuH,KACrB,OAAOsG,QAAQY,UAEnB,IAAKzO,KAAKyM,WAAW3M,QAAUE,KAAKyM,WAAW1M,OAC3C,OAAO8N,QAAQY,UAEnB,MAAMqU,EAAS9iB,KAAKqjB,WACpB,IAAKP,EACD,OAAOjV,QAAQC,OAAO,IAAI1E,MAAM,sBAEpC,MAAMJ,EAAW,CACbC,MAAOjJ,KAAKiJ,MACZ1B,KAAMvH,KAAKuH,KACXkF,WAAYzM,KAAKyM,WACjBM,QAAS/M,KAAK+M,SAKlB,OAHK/D,EAASzB,KAAKmF,aACf1D,EAASzB,KAAKmF,WAAa,WAExBoW,EAAOrO,KAAKzL,EAAUhJ,KAAKsR,SAAUuF,EAAO1T,GAAMkK,MAAK,KAC1DrN,KAAK8iB,OAAO/f,OACZ/C,KAAK8iB,OAASA,EACd9iB,KAAK8iB,OAAOlgB,OACZ5C,KAAK2iB,YAAY5f,OACjB/C,KAAK+hB,kBAAkB,GAE9B,CACD,cAAIsB,GACA,IAAI1Z,EAAIM,EACR,OAA6B,QAApBN,EAAK3J,KAAKuH,YAAyB,IAAPoC,OAAgB,EAASA,EAAG+G,MAC7D,IAAK,QAQL,QACI,OAAO1Q,KAAK0iB,YAPhB,IAAK,QACD,OAAO1iB,KAAK2iB,YAChB,IAAK,SACD,OAAoC,QAA5B1Y,EAAKjK,KAAK6iB,oBAAiC,IAAP5Y,EAAgBA,EAAKjK,KAAK0iB,YAC1E,IAAK,WACD,OAAO1iB,KAAK4iB,eAIvB,CACD,WAAAhB,GACI,GAAI5hB,KAAK+iB,YACL,OAEJ,MAAMjjB,EAAQE,KAAKyW,UAAUqH,YACvB/d,EAASC,KAAKyW,UAAUsH,aAC1Bje,IAAUE,KAAKsiB,gBAAkBviB,IAAWC,KAAKuiB,kBACjDviB,KAAKsiB,eAAiBxiB,EACtBE,KAAKuiB,gBAAkBxiB,EACvBC,KAAK6hB,YAEJ7hB,KAAK+iB,aACNnf,sBAAsB5D,KAAK4hB,YAElC,CACD,WAAAxK,CAAYpI,GACRhP,KAAK8iB,OAAO1L,YAAYpI,EAC3B,CACD,YAAAuI,CAAavI,GACThP,KAAK8iB,OAAOvL,aAAavI,EAC5B,CACD,WAAAqI,CAAYrI,GACRhP,KAAK8iB,OAAOzL,YAAYrI,EAC3B,CACD,SAAAsI,CAAUtI,GACNhP,KAAK8iB,OAAOxL,UAAUtI,EACzB,CACD,YAAAwI,CAAaxI,GACThP,KAAK8iB,OAAOtL,aAAaxI,EAC5B,CACD,WAAAyI,CAAYzI,GACRhP,KAAK8iB,OAAOrL,YAAYzI,EAC3B,CACD,UAAA0I,CAAW1I,GACPhP,KAAK8iB,OAAOpL,WAAW1I,EAC1B,CACD,mBAAA2I,CAAoB3I,GAChBhP,KAAK8iB,OAAOnL,oBAAoB3I,EACnC,CACD,QAAA6S,GACI,MAAM/hB,EAAQE,KAAKyW,UAAUqH,YACvB/d,EAASC,KAAKyW,UAAUsH,aAC9B/d,KAAKM,WAAaJ,EAASqB,sBAAsBzB,EAAQ4a,OAAOsJ,iBAAkBjkB,EAAS2a,OAAOsJ,kBAClGhkB,KAAKyM,WAAW3M,MAAQE,KAAKM,WAAWR,MACxCE,KAAKyM,WAAW1M,OAASC,KAAKM,WAAWP,OACzCC,KAAKwiB,SAASxf,OAAOlD,EAAOC,EAAQ2a,OAAOsJ,kBAC3ChkB,KAAKyiB,SAASzf,OAAOlD,EAAOC,EAAQ2a,OAAOsJ,kBAC3ChkB,KAAKqJ,MAAMrG,OAAOlD,EAAOC,EAAQC,KAAKM,WAAYN,KAAK2hB,QAAQjhB,KAC/DV,KAAKijB,YAAW,GAAO,GAClB5V,MAAK,KACNrN,KAAK+hB,kBAAkB,IAEtBvN,OAAMxF,IACPhP,KAAK8hB,YAAY9S,EAAE,GAE1B,CACD,mBAAAgT,IAAuBvJ,GACnBzY,KAAK+hB,mBACL/hB,KAAK2hB,QAAQS,OAAOnG,iBAAiBxD,GACrCzY,KAAK2hB,QAAQS,OAAOJ,uBAAuBvJ,EAC9C,CACD,qBAAAwJ,CAAsBxJ,GAClBzY,KAAK+hB,mBACL/hB,KAAK2hB,QAAQS,OAAOnG,cAAcxD,EAAKlY,UACvCP,KAAK2hB,QAAQS,OAAOH,sBAAsBxJ,EAAKlY,SAClD,CACD,gBAAAwhB,GACI,MAAMzQ,EAAWtR,KAAK8iB,OAAOxR,SAAStR,KAAKM,YACvCgR,EAAS9K,QACTxG,KAAK2hB,QAAQS,OAAOL,iBAAiBzQ,EAC5C,CACD,WAAAkB,IAAeiG,GACXzY,KAAKyW,UAAU1U,UAAUC,IAAI,+BAC7BhC,KAAK2hB,QAAQS,OAAO5P,eAAeiG,EACtC,CACD,cAAAhG,IAAkBgG,GACdzY,KAAK2hB,QAAQS,OAAO3P,kBAAkBgG,EACzC,CACD,SAAA/F,IAAa+F,GACTzY,KAAKyW,UAAU1U,UAAU6U,OAAO,+BAChC5W,KAAK2hB,QAAQS,OAAO1P,aAAa+F,EACpC,CACD,WAAAqJ,IAAerJ,GACXzY,KAAKyW,UAAU1U,UAAU6U,OAAO,+BAChC5W,KAAK2hB,QAAQS,OAAON,eAAerJ,EACtC"}
|