@galacean/engine-xr-webxr 1.6.7 → 1.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../xr/dist/module.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_type_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../src/Util.ts","../src/WebXRFrame.ts","../src/WebXRSession.ts","../src/WebXRDevice.ts","../src/feature/WebXRTrackableFeature.ts","../src/feature/WebXRFeature.ts","../src/feature/WebXRAnchorTracking.ts","../src/feature/WebXRImageTracking.ts","../src/feature/WebXRPlaneTracking.ts"],"sourcesContent":["function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { CameraType, Matrix, CameraClearFlags, Vector3, Quaternion, Rect, SafeLoopArray, XRManager, Ray, Plane, Vector2, decoder, AssetPromise, resourceLoader, decode, Loader } from '@galacean/engine';\n\nfunction _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nfunction _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\n\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\n\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\n\n/**\n * Enumerates some input devices that can be tracked.(including status, posture and other information)\n */ var XRTrackedInputDevice = /*#__PURE__*/ function(XRTrackedInputDevice) {\n /** Controller */ XRTrackedInputDevice[XRTrackedInputDevice[\"Controller\"] = 0] = \"Controller\";\n /** Left controller */ XRTrackedInputDevice[XRTrackedInputDevice[\"LeftController\"] = 1] = \"LeftController\";\n /** Right controller */ XRTrackedInputDevice[XRTrackedInputDevice[\"RightController\"] = 2] = \"RightController\";\n /** Camera */ XRTrackedInputDevice[XRTrackedInputDevice[\"Camera\"] = 3] = \"Camera\";\n /** Left camera */ XRTrackedInputDevice[XRTrackedInputDevice[\"LeftCamera\"] = 4] = \"LeftCamera\";\n /** Right camera */ XRTrackedInputDevice[XRTrackedInputDevice[\"RightCamera\"] = 5] = \"RightCamera\";\n /** Head */ XRTrackedInputDevice[XRTrackedInputDevice[\"LeftHand\"] = 6] = \"LeftHand\";\n /** Right hand */ XRTrackedInputDevice[XRTrackedInputDevice[\"RightHand\"] = 7] = \"RightHand\";\n return XRTrackedInputDevice;\n}({});\n\n/**\n * The state of an XRSession.\n */ var XRSessionState = /*#__PURE__*/ function(XRSessionState) {\n /** Not initialized. */ XRSessionState[XRSessionState[\"None\"] = 0] = \"None\";\n /** Initializing session. */ XRSessionState[XRSessionState[\"Initializing\"] = 1] = \"Initializing\";\n /** Initialized but not started. */ XRSessionState[XRSessionState[\"Initialized\"] = 2] = \"Initialized\";\n /** Running. */ XRSessionState[XRSessionState[\"Running\"] = 3] = \"Running\";\n /** Paused. */ XRSessionState[XRSessionState[\"Paused\"] = 4] = \"Paused\";\n return XRSessionState;\n}({});\n\n/**\n * The manager of XR camera.\n */ var XRCameraManager = /*#__PURE__*/ function() {\n function XRCameraManager(_xrManager) {\n this._xrManager = _xrManager;\n }\n var _proto = XRCameraManager.prototype;\n /**\n * Attach the camera to the specified input type(Camera, LeftCamera or RightCamera).\n * The camera entity need to be moved to the XROrigin entity.\n * @param type - The input type\n * @param camera - The camera to be attached\n */ _proto.attachCamera = function attachCamera(type, camera) {\n var xrCamera = this._xrManager.inputManager.getTrackedDevice(type);\n var preCamera = xrCamera._camera;\n if (preCamera !== camera) {\n // @ts-ignore\n preCamera && (preCamera._cameraType = CameraType.Normal);\n switch(type){\n case XRTrackedInputDevice.Camera:\n // @ts-ignore\n camera._cameraType = CameraType.XRCenterCamera;\n break;\n case XRTrackedInputDevice.LeftCamera:\n // @ts-ignore\n camera._cameraType = CameraType.XRLeftCamera;\n break;\n case XRTrackedInputDevice.RightCamera:\n // @ts-ignore\n camera._cameraType = CameraType.XRRightCamera;\n break;\n }\n xrCamera._camera = camera;\n }\n };\n /**\n * Detach the camera from the specified input type.\n * @param type - The input type\n * @returns The camera that was detached\n */ _proto.detachCamera = function detachCamera(type) {\n var xrCamera = this._xrManager.inputManager.getTrackedDevice(type);\n var preCamera = xrCamera._camera;\n // @ts-ignore\n preCamera && (preCamera._cameraType = CameraType.Normal);\n xrCamera._camera = null;\n return preCamera;\n };\n /**\n * @internal\n */ _proto._onSessionStart = function _onSessionStart() {};\n /**\n * @internal\n */ _proto._onUpdate = function _onUpdate() {\n var cameras = this._xrManager.inputManager._cameras;\n var platformSession = this._xrManager.sessionManager._platformSession;\n for(var i = 0, n = cameras.length; i < n; i++){\n var cameraDevice = cameras[i];\n var camera = cameraDevice._camera;\n if (!camera) continue;\n // sync position and rotation\n var transform = camera.entity.transform;\n var pose = cameraDevice.pose;\n transform.position = pose.position;\n transform.rotationQuaternion = pose.rotation;\n // sync viewport\n var viewport = camera.viewport;\n var _cameraDevice_viewport = cameraDevice.viewport, x = _cameraDevice_viewport.x, y = _cameraDevice_viewport.y, width = _cameraDevice_viewport.width, height = _cameraDevice_viewport.height;\n if (!(x === viewport.x && y === viewport.y && width === viewport.z && height === viewport.w)) {\n camera.viewport = viewport.set(x, y, width, height);\n }\n // sync project matrix\n if (!Matrix.equals(camera.projectionMatrix, cameraDevice.projectionMatrix)) {\n camera.projectionMatrix = cameraDevice.projectionMatrix;\n }\n // sync pixel viewport (only when rendering to XR main framebuffer)\n if (!camera.renderTarget) {\n // @ts-ignore\n camera._adjustPixelViewport(platformSession.framebufferWidth, platformSession.framebufferHeight);\n }\n }\n };\n /**\n * @internal\n */ _proto._onSessionExit = function _onSessionExit() {\n var cameras = this._xrManager.inputManager._cameras;\n for(var i = 0, n = cameras.length; i < n; i++){\n var // @ts-ignore\n _cameras_i__camera;\n (_cameras_i__camera = cameras[i]._camera) == null ? void 0 : _cameras_i__camera._updatePixelViewport();\n }\n };\n /**\n * @internal\n */ _proto._getIgnoreClearFlags = function _getIgnoreClearFlags(cameraType) {\n if (cameraType === CameraType.XRCenterCamera) {\n if (this._xrManager.sessionManager.state === XRSessionState.Running) {\n return CameraClearFlags.Color;\n } else {\n return CameraClearFlags.None;\n }\n } else {\n return CameraClearFlags.None;\n }\n };\n /**\n * @internal\n */ _proto._onDestroy = function _onDestroy() {};\n _create_class(XRCameraManager, [\n {\n key: \"fixedFoveation\",\n get: /**\n * The fixed foveation of the camera.\n */ function get() {\n var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;\n if (platformSession) {\n return platformSession.getFixedFoveation();\n } else {\n throw new Error(\"XR session is not available.\");\n }\n },\n set: function set(value) {\n var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;\n if (platformSession) {\n platformSession.setFixedFoveation(value);\n } else {\n throw new Error(\"XR session is not available.\");\n }\n }\n }\n ]);\n return XRCameraManager;\n}();\n\n/**\n * Data for describing pose in the XR space.\n */ var XRPose = function XRPose() {\n /** The position of the pose in XR space. */ this.position = new Vector3();\n /** The rotation of the pose in XR space. */ this.rotation = new Quaternion();\n /** The matrix of the pose in XR space. */ this.matrix = new Matrix();\n /** The inverse matrix of the pose in XR space. */ this.inverseMatrix = new Matrix();\n};\n\n/**\n * Enum for XR tracking state.\n */ var XRTrackingState = /*#__PURE__*/ function(XRTrackingState) {\n /** Not tracking */ XRTrackingState[XRTrackingState[\"NotTracking\"] = 0] = \"NotTracking\";\n /** Tracking */ XRTrackingState[XRTrackingState[\"Tracking\"] = 1] = \"Tracking\";\n /** Lost track */ XRTrackingState[XRTrackingState[\"TrackingLost\"] = 2] = \"TrackingLost\";\n return XRTrackingState;\n}({});\n\nvar XRInput = function XRInput(type) {\n this.type = type;\n this./** The tracking state of xr input. */ trackingState = XRTrackingState.NotTracking;\n};\n\n/**\n * The XR camera.\n */ var XRCamera = /*#__PURE__*/ function(XRInput) {\n _inherits(XRCamera, XRInput);\n function XRCamera() {\n var _this;\n _this = XRInput.apply(this, arguments) || this, /** The pose of the camera in XR space. */ _this.pose = new XRPose(), /** The viewport of the camera. */ _this.viewport = new Rect(), /** The projection matrix of the camera. */ _this.projectionMatrix = new Matrix();\n return _this;\n }\n return XRCamera;\n}(XRInput);\n\n/**\n * Enum for XR input button.\n */ var XRInputButton = /*#__PURE__*/ function(XRInputButton) {\n /** None */ XRInputButton[XRInputButton[\"None\"] = 0] = \"None\";\n /** Select */ XRInputButton[XRInputButton[\"Select\"] = 1] = \"Select\";\n /** Select */ XRInputButton[XRInputButton[\"Trigger\"] = 1] = \"Trigger\";\n /** Squeeze */ XRInputButton[XRInputButton[\"Squeeze\"] = 2] = \"Squeeze\";\n /** TouchPad */ XRInputButton[XRInputButton[\"TouchPad\"] = 4] = \"TouchPad\";\n /** A */ XRInputButton[XRInputButton[\"AButton\"] = 8] = \"AButton\";\n /** B */ XRInputButton[XRInputButton[\"BButton\"] = 16] = \"BButton\";\n return XRInputButton;\n}({});\n\n/**\n * The XR controller.\n */ var XRController = /*#__PURE__*/ function(XRInput) {\n _inherits(XRController, XRInput);\n function XRController() {\n var _this;\n _this = XRInput.apply(this, arguments) || this, /** The grip space pose of the controller in XR space. */ _this.gripPose = new XRPose(), /** The target ray space pose of the controller in XR space. */ _this.targetRayPose = new XRPose(), /** The currently pressed buttons of this controller. */ _this.pressedButtons = XRInputButton.None, /** Record button lifted. */ _this.down = XRInputButton.None, /** Record button pressed. */ _this.up = XRInputButton.None;\n return _this;\n }\n var _proto = XRController.prototype;\n /**\n *\n * Returns whether the button is pressed.\n * @param button - The button to check\n * @returns Whether the button is pressed\n */ _proto.isButtonDown = function isButtonDown(button) {\n return (this.down & button) !== 0;\n };\n /**\n * Returns whether the button is lifted.\n * @param button - The button to check\n * @returns Whether the button is lifted\n */ _proto.isButtonUp = function isButtonUp(button) {\n return (this.up & button) !== 0;\n };\n /**\n * Returns whether the button is held down.\n * @param button - The button to check\n * @returns Whether the button is held down\n */ _proto.isButtonHeldDown = function isButtonHeldDown(button) {\n return (this.pressedButtons & button) !== 0;\n };\n return XRController;\n}(XRInput);\n\nvar XRInputEventType = /*#__PURE__*/ function(XRInputEventType) {\n XRInputEventType[XRInputEventType[\"SelectStart\"] = 0] = \"SelectStart\";\n XRInputEventType[XRInputEventType[\"Select\"] = 1] = \"Select\";\n XRInputEventType[XRInputEventType[\"SelectEnd\"] = 2] = \"SelectEnd\";\n XRInputEventType[XRInputEventType[\"SqueezeStart\"] = 3] = \"SqueezeStart\";\n XRInputEventType[XRInputEventType[\"Squeeze\"] = 4] = \"Squeeze\";\n XRInputEventType[XRInputEventType[\"SqueezeEnd\"] = 5] = \"SqueezeEnd\";\n return XRInputEventType;\n}({});\n\nvar XRTargetRayMode = /*#__PURE__*/ function(XRTargetRayMode) {\n XRTargetRayMode[XRTargetRayMode[\"Gaze\"] = 0] = \"Gaze\";\n XRTargetRayMode[XRTargetRayMode[\"TrackedPointer\"] = 1] = \"TrackedPointer\";\n XRTargetRayMode[XRTargetRayMode[\"Screen\"] = 2] = \"Screen\";\n return XRTargetRayMode;\n}({});\n\n/**\n * The manager of XR input.\n */ var XRInputManager = /*#__PURE__*/ function() {\n function XRInputManager(_xrManager, _engine) {\n this._xrManager = _xrManager;\n this._engine = _engine;\n this./** @internal */ _cameras = [];\n this./** @internal */ _controllers = [];\n this._added = [];\n this._removed = [];\n this._trackedDevices = [];\n this._statusSnapshot = [];\n this._listeners = new SafeLoopArray();\n var _this = this, trackedDevices = _this._trackedDevices, controllers = _this._controllers, cameras = _this._cameras;\n for(var i = 0; i < 6; i++){\n switch(i){\n case XRTrackedInputDevice.Camera:\n case XRTrackedInputDevice.LeftCamera:\n case XRTrackedInputDevice.RightCamera:\n cameras.push(trackedDevices[i] = new XRCamera(i));\n break;\n case XRTrackedInputDevice.Controller:\n case XRTrackedInputDevice.LeftController:\n case XRTrackedInputDevice.RightController:\n controllers.push(trackedDevices[i] = new XRController(i));\n break;\n }\n }\n this._statusSnapshot.fill(XRTrackingState.NotTracking, 0, trackedDevices.length);\n }\n var _proto = XRInputManager.prototype;\n /**\n * Returns the tracked device instance.\n * @param type - The tracked input device type\n * @returns The input instance\n */ _proto.getTrackedDevice = function getTrackedDevice(type) {\n return this._trackedDevices[type];\n };\n /**\n * Add a listener for tracked device changes.\n * @param listener - The listener to add\n */ _proto.addTrackedDeviceChangedListener = function addTrackedDeviceChangedListener(listener) {\n this._listeners.push({\n fn: listener\n });\n };\n /**\n * Remove a listener of tracked device changes.\n * @param listener - The listener to remove\n */ _proto.removeTrackedDeviceChangedListener = function removeTrackedDeviceChangedListener(listener) {\n this._listeners.findAndRemove(function(value) {\n return value.fn === listener ? value.destroyed = true : false;\n });\n };\n /**\n * @internal\n */ _proto._onUpdate = function _onUpdate() {\n var _this = this, added = _this._added, removed = _this._removed, statusSnapshot = _this._statusSnapshot;\n var _this1 = this, trackedDevices = _this1._trackedDevices, controllers = _this1._controllers;\n // Reset data\n added.length = removed.length = 0;\n for(var i = 0, n = controllers.length; i < n; i++){\n var controller = controllers[i];\n controller.down = controller.up = 0;\n }\n // Handle events and update tracked devices\n var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;\n var platformEvents = platformSession.events;\n for(var i1 = 0, n1 = platformEvents.length; i1 < n1; i1++){\n this._handleEvent(platformEvents[i1]);\n }\n platformSession.resetEvents();\n platformSession.frame.updateInputs(trackedDevices);\n for(var i2 = 0, n2 = trackedDevices.length; i2 < n2; i2++){\n var input = trackedDevices[i2];\n if (!input) continue;\n var nowState = input.trackingState;\n if (statusSnapshot[i2] === XRTrackingState.Tracking) {\n if (nowState !== XRTrackingState.Tracking) {\n removed.push(input);\n }\n } else {\n if (nowState === XRTrackingState.Tracking) {\n added.push(input);\n }\n }\n statusSnapshot[i2] = nowState;\n }\n // Dispatch change event\n if (added.length > 0 || removed.length > 0) {\n var listeners = this._listeners.getLoopArray();\n for(var i3 = 0, n3 = listeners.length; i3 < n3; i3++){\n var listener = listeners[i3];\n !listener.destroyed && listener.fn(added, removed);\n }\n }\n };\n /**\n * @internal\n */ _proto._onDestroy = function _onDestroy() {\n this._listeners.findAndRemove(function(value) {\n return value.destroyed = true;\n });\n };\n _proto._handleEvent = function _handleEvent(event) {\n var input = this._trackedDevices[event.input];\n switch(event.targetRayMode){\n case XRTargetRayMode.TrackedPointer:\n switch(event.type){\n case XRInputEventType.SelectStart:\n input.down |= XRInputButton.Select;\n input.pressedButtons |= XRInputButton.Select;\n break;\n case XRInputEventType.SelectEnd:\n input.up |= XRInputButton.Select;\n input.pressedButtons &= ~XRInputButton.Select;\n break;\n case XRInputEventType.SqueezeStart:\n input.down |= XRInputButton.Squeeze;\n input.pressedButtons |= XRInputButton.Squeeze;\n break;\n case XRInputEventType.SqueezeEnd:\n input.up |= XRInputButton.Squeeze;\n input.pressedButtons &= ~XRInputButton.Squeeze;\n break;\n }\n break;\n case XRTargetRayMode.Screen:\n var _this = this, engine = _this._engine;\n // @ts-ignore\n var target = engine.inputManager._pointerManager._target;\n // @ts-ignore\n var canvas = engine.canvas._webCanvas;\n var clientWidth = canvas.clientWidth, clientHeight = canvas.clientHeight;\n var clientX = clientWidth * (event.x + 1) * 0.5;\n var clientY = clientHeight * (event.y + 1) * 0.5;\n // @ts-ignore\n switch(event.type){\n case XRInputEventType.SelectStart:\n target.dispatchEvent(this._makeUpPointerEvent(\"pointerdown\", event.id, clientX, clientY));\n break;\n case XRInputEventType.Select:\n target.dispatchEvent(this._makeUpPointerEvent(\"pointermove\", event.id, clientX, clientY));\n break;\n case XRInputEventType.SelectEnd:\n target.dispatchEvent(this._makeUpPointerEvent(\"pointerup\", event.id, clientX, clientY));\n target.dispatchEvent(this._makeUpPointerEvent(\"pointerleave\", event.id, clientX, clientY));\n break;\n }\n break;\n }\n };\n _proto._makeUpPointerEvent = function _makeUpPointerEvent(type, pointerId, clientX, clientY) {\n var eventInitDict = {\n pointerId: pointerId,\n clientX: clientX,\n clientY: clientY\n };\n switch(type){\n case \"pointerdown\":\n eventInitDict.button = 0;\n eventInitDict.buttons = 1;\n break;\n case \"pointermove\":\n eventInitDict.button = -1;\n eventInitDict.buttons = 1;\n break;\n case \"pointerup\":\n eventInitDict.button = 0;\n eventInitDict.buttons = 0;\n break;\n case \"pointerleave\":\n eventInitDict.button = 0;\n eventInitDict.buttons = 0;\n break;\n }\n return new PointerEvent(type, eventInitDict);\n };\n return XRInputManager;\n}();\n\n/**\n * The type of XR session.\n */ var XRSessionMode = /*#__PURE__*/ function(XRSessionMode) {\n XRSessionMode[XRSessionMode[\"None\"] = 0] = \"None\";\n XRSessionMode[XRSessionMode[\"AR\"] = 1] = \"AR\";\n XRSessionMode[XRSessionMode[\"VR\"] = 2] = \"VR\";\n return XRSessionMode;\n}({});\n\n/**\n * XRSessionManager manages the life cycle of XR sessions.\n */ var XRSessionManager = /*#__PURE__*/ function() {\n function XRSessionManager(_xrManager, _engine) {\n this._xrManager = _xrManager;\n this._engine = _engine;\n this._mode = XRSessionMode.None;\n this._state = XRSessionState.None;\n this._listeners = new SafeLoopArray();\n // @ts-ignore\n this._rhi = _engine._hardwareRenderer;\n this._raf = requestAnimationFrame.bind(window);\n this._caf = cancelAnimationFrame.bind(window);\n this._onSessionExit = this._onSessionExit.bind(this);\n }\n var _proto = XRSessionManager.prototype;\n /**\n * Check if the specified mode is supported.\n * @param mode - The mode to check\n * @returns A promise that resolves if the mode is supported, otherwise rejects\n */ _proto.isSupportedMode = function isSupportedMode(mode) {\n return this._xrManager._platformDevice.isSupportedSessionMode(mode);\n };\n /**\n * Run the session.\n */ _proto.run = function run() {\n var _this = this, platformSession = _this._platformSession, engine = _this._engine;\n if (!platformSession) {\n throw new Error(\"Without session to run.\");\n }\n platformSession.start();\n this._setState(XRSessionState.Running);\n this._xrManager._onSessionStart();\n if (!engine.isPaused) {\n engine.pause();\n engine.resume();\n }\n };\n /**\n * Stop the session.\n */ _proto.stop = function stop() {\n var _this = this, platformSession = _this._platformSession, engine = _this._engine, rhi = _this._rhi;\n if (!platformSession) {\n throw new Error(\"Without session to stop.\");\n }\n if (this._state !== XRSessionState.Running) {\n throw new Error(\"Session is not running.\");\n }\n rhi._mainFrameBuffer = null;\n rhi._mainFrameWidth = rhi._mainFrameHeight = 0;\n platformSession.stop();\n this._setState(XRSessionState.Paused);\n this._xrManager._onSessionStop();\n if (!engine.isPaused) {\n engine.pause();\n engine.resume();\n }\n };\n /**\n * Add a listening function for session state changes.\n * @param listener - The listening function\n */ _proto.addStateChangedListener = function addStateChangedListener(listener) {\n this._listeners.push({\n fn: listener\n });\n };\n /**\n * Remove a listening function of session state changes.\n * @param listener - The listening function\n */ _proto.removeStateChangedListener = function removeStateChangedListener(listener) {\n this._listeners.findAndRemove(function(value) {\n return value.fn === listener ? value.destroyed = true : false;\n });\n };\n /**\n * @internal\n */ _proto._setState = function _setState(value) {\n this._state = value;\n var listeners = this._listeners.getLoopArray();\n for(var i = 0, n = listeners.length; i < n; i++){\n var listener = listeners[i];\n !listener.destroyed && listener.fn(value);\n }\n };\n /**\n * @internal\n */ _proto._initialize = function _initialize(mode, features) {\n var _this = this;\n return new Promise(function(resolve, reject) {\n var xrManager = _this._xrManager;\n // Initialize all features\n var platformFeatures = [];\n for(var i = 0, n = features.length; i < n; i++){\n var _features_i = features[i], platformFeature = _features_i._platformFeature;\n platformFeature && platformFeatures.push(platformFeature);\n }\n xrManager._platformDevice.requestSession(_this._rhi, mode, platformFeatures).then(function(platformSession) {\n _this._mode = mode;\n _this._platformSession = platformSession;\n _this._setState(XRSessionState.Initialized);\n platformSession.setSessionExitCallBack(_this._onSessionExit);\n platformSession.addEventListener();\n xrManager._onSessionInit();\n resolve();\n }, reject);\n });\n };\n /**\n * @internal\n */ _proto._onUpdate = function _onUpdate() {\n var _this = this, rhi = _this._rhi, platformSession = _this._platformSession;\n rhi._mainFrameBuffer = platformSession.framebuffer;\n rhi._mainFrameWidth = platformSession.framebufferWidth;\n rhi._mainFrameHeight = platformSession.framebufferHeight;\n };\n /**\n * @internal\n */ _proto._getRequestAnimationFrame = function _getRequestAnimationFrame() {\n if (this._state === XRSessionState.Running) {\n return this._platformSession.requestAnimationFrame;\n } else {\n return this._raf;\n }\n };\n /**\n * @internal\n */ _proto._getCancelAnimationFrame = function _getCancelAnimationFrame() {\n if (this._state === XRSessionState.Running) {\n return this._platformSession.cancelAnimationFrame;\n } else {\n return this._caf;\n }\n };\n /**\n * @internal\n */ _proto._exit = function _exit() {\n var _this = this, platformSession = _this._platformSession;\n if (!platformSession) {\n return Promise.reject(\"Without session to stop.\");\n }\n return platformSession.end();\n };\n _proto._onSessionExit = function _onSessionExit() {\n var _this = this, rhi = _this._rhi, platformSession = _this._platformSession, engine = _this._engine;\n rhi._mainFrameBuffer = null;\n rhi._mainFrameWidth = rhi._mainFrameHeight = 0;\n platformSession.removeEventListener();\n this._platformSession = null;\n this._setState(XRSessionState.None);\n this._xrManager._onSessionExit();\n if (!engine.isPaused) {\n engine.pause();\n engine.resume();\n }\n };\n /**\n * @internal\n */ _proto._onDestroy = function _onDestroy() {\n this._listeners.findAndRemove(function(value) {\n return value.destroyed = true;\n });\n this._raf = this._caf = null;\n };\n _create_class(XRSessionManager, [\n {\n key: \"mode\",\n get: /**\n * The current session mode( AR or VR ).\n */ function get() {\n return this._mode;\n }\n },\n {\n key: \"state\",\n get: /**\n * Return the current session state.\n */ function get() {\n return this._state;\n }\n },\n {\n key: \"supportedFrameRate\",\n get: /**\n * Return a list of supported frame rates.(only available in-session)\n */ function get() {\n return this._platformSession.supportedFrameRates;\n }\n },\n {\n key: \"frameRate\",\n get: /**\n * Return the current frame rate as reported by the device.\n */ function get() {\n return this._platformSession.frameRate;\n }\n }\n ]);\n return XRSessionManager;\n}();\n\n/**\n * @internal\n */ var XRManagerExtended = /*#__PURE__*/ function(XRManager) {\n _inherits(XRManagerExtended, XRManager);\n function XRManagerExtended() {\n return XRManager.apply(this, arguments) || this;\n }\n var _proto = XRManagerExtended.prototype;\n _proto.isSupportedFeature = function isSupportedFeature(feature) {\n return this._platformDevice.isSupportedFeature(XRManagerExtended._featureMap.get(feature));\n };\n _proto.addFeature = function addFeature(type) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (this.sessionManager._platformSession) {\n throw new Error(\"Cannot add feature when the session is initialized.\");\n }\n if (!this._platformDevice.isSupportedFeature(XRManagerExtended._featureMap.get(type))) {\n throw new Error(\"The feature is not supported\");\n }\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n if (_instanceof(features[i], type)) throw new Error(\"The feature has been added\");\n }\n var feature = _construct(type, [].concat([\n this\n ], args));\n features.push(feature);\n return feature;\n };\n _proto.getFeature = function getFeature(type) {\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n var feature = features[i];\n if (_instanceof(feature, type)) {\n return feature;\n }\n }\n };\n _proto.enterXR = function enterXR(sessionMode, autoRun) {\n var _this = this;\n if (autoRun === void 0) autoRun = true;\n var sessionManager = this.sessionManager;\n if (sessionManager._platformSession) {\n throw new Error(\"Please exit XR immersive mode first.\");\n }\n if (!this._origin) {\n throw new Error(\"Please set origin before enter XR.\");\n }\n return new Promise(function(resolve, reject) {\n // 1. Check if this xr mode is supported\n sessionManager.isSupportedMode(sessionMode).then(function() {\n sessionManager._setState(XRSessionState.Initializing);\n // 2. Initialize session\n sessionManager._initialize(sessionMode, _this.features).then(function() {\n autoRun && sessionManager.run();\n resolve();\n }, reject);\n }, reject);\n });\n };\n _proto.exitXR = function exitXR() {\n var _this = this;\n return new Promise(function(resolve, reject) {\n _this.sessionManager._exit().then(function() {\n resolve();\n }, reject);\n });\n };\n _proto._initialize = function _initialize(engine, xrDevice) {\n this._features = [];\n this._platformDevice = xrDevice;\n this.sessionManager = new XRSessionManager(this, engine);\n this.inputManager = new XRInputManager(this, engine);\n this.cameraManager = new XRCameraManager(this);\n };\n _proto._update = function _update() {\n var sessionManager = this.sessionManager;\n if (sessionManager.state !== XRSessionState.Running) return;\n sessionManager._onUpdate();\n this.inputManager._onUpdate();\n this.cameraManager._onUpdate();\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n var feature = features[i];\n feature.enabled && feature._onUpdate();\n }\n };\n _proto._destroy = function _destroy() {\n var _this = this;\n if (this.sessionManager._platformSession) {\n this.exitXR().then(function() {\n _this.sessionManager._onDestroy();\n _this.inputManager._onDestroy();\n _this.cameraManager._onDestroy();\n });\n } else {\n this.sessionManager._onDestroy();\n this.inputManager._onDestroy();\n this.cameraManager._onDestroy();\n }\n };\n _proto._getRequestAnimationFrame = function _getRequestAnimationFrame() {\n return this.sessionManager._getRequestAnimationFrame();\n };\n _proto._getCancelAnimationFrame = function _getCancelAnimationFrame() {\n return this.sessionManager._getCancelAnimationFrame();\n };\n _proto._getCameraIgnoreClearFlags = function _getCameraIgnoreClearFlags(type) {\n return this.cameraManager._getIgnoreClearFlags(type);\n };\n /**\n * @internal\n */ _proto._onSessionStop = function _onSessionStop() {\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n var feature = features[i];\n feature.enabled && feature._onSessionStop();\n }\n };\n /**\n * @internal\n */ _proto._onSessionInit = function _onSessionInit() {\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n var feature = features[i];\n feature.enabled && feature._onSessionInit();\n }\n };\n /**\n * @internal\n */ _proto._onSessionStart = function _onSessionStart() {\n this.cameraManager._onSessionStart();\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n var feature = features[i];\n feature.enabled && feature._onSessionStart();\n }\n };\n /**\n * @internal\n */ _proto._onSessionExit = function _onSessionExit() {\n this.cameraManager._onSessionExit();\n var features = this.features;\n for(var i = 0, n = features.length; i < n; i++){\n var feature = features[i];\n feature.enabled && feature._onSessionExit();\n feature._onDestroy();\n }\n features.length = 0;\n };\n _create_class(XRManagerExtended, [\n {\n key: \"features\",\n get: function get() {\n return this._features;\n }\n },\n {\n key: \"origin\",\n get: function get() {\n return this._origin;\n },\n set: function set(value) {\n if (this.sessionManager._platformSession) {\n throw new Error(\"Cannot set origin when the session is initialized.\");\n }\n this._origin = value;\n }\n }\n ]);\n return XRManagerExtended;\n}(XRManager);\n/** @internal */ XRManagerExtended._featureMap = new Map();\n/**\n * @internal\n */ function registerXRFeature(type) {\n return function(feature) {\n XRManagerExtended._featureMap.set(feature, type);\n };\n}\n// 实现混入的函数\nfunction ApplyMixins(derivedCtor, baseCtors) {\n baseCtors.forEach(function(baseCtor) {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach(function(name) {\n Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));\n });\n });\n}\nApplyMixins(XRManager, [\n XRManagerExtended\n]);\n\n/**\n * The base class of XR feature manager.\n */ var XRFeature = /*#__PURE__*/ function() {\n function XRFeature(_xrManager, _type) {\n for(var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){\n args[_key - 2] = arguments[_key];\n }\n var _xrManager__platformDevice;\n this._xrManager = _xrManager;\n this._type = _type;\n this._enabled = true;\n this._platformFeature = (_xrManager__platformDevice = _xrManager._platformDevice).createPlatformFeature.apply(_xrManager__platformDevice, [].concat([\n _type\n ], args));\n this._onEnable();\n }\n var _proto = XRFeature.prototype;\n /**\n * @internal\n */ _proto._onEnable = function _onEnable() {};\n /**\n * @internal\n */ _proto._onDisable = function _onDisable() {};\n /**\n * @internal\n */ _proto._onUpdate = function _onUpdate() {};\n /**\n * @internal\n */ _proto._onSessionInit = function _onSessionInit() {};\n /**\n * @internal\n */ _proto._onSessionStart = function _onSessionStart() {};\n /**\n * @internal\n */ _proto._onSessionStop = function _onSessionStop() {};\n /**\n * @internal\n */ _proto._onSessionExit = function _onSessionExit() {};\n /**\n * @internal\n */ _proto._onDestroy = function _onDestroy() {};\n _create_class(XRFeature, [\n {\n key: \"enabled\",\n get: /**\n * Returns whether the feature is enabled.\n */ function get() {\n return this._enabled;\n },\n set: function set(value) {\n if (this.enabled !== value) {\n this._enabled = value;\n value ? this._onEnable() : this._onDisable();\n }\n }\n }\n ]);\n return XRFeature;\n}();\n\nvar XRFeatureType = /*#__PURE__*/ function(XRFeatureType) {\n XRFeatureType[XRFeatureType[\"AnchorTracking\"] = 0] = \"AnchorTracking\";\n XRFeatureType[XRFeatureType[\"ImageTracking\"] = 1] = \"ImageTracking\";\n XRFeatureType[XRFeatureType[\"PlaneTracking\"] = 2] = \"PlaneTracking\";\n XRFeatureType[XRFeatureType[\"HitTest\"] = 3] = \"HitTest\";\n return XRFeatureType;\n}({});\n\nvar XRRequestTrackingState = /*#__PURE__*/ function(XRRequestTrackingState) {\n XRRequestTrackingState[XRRequestTrackingState[\"None\"] = 0] = \"None\";\n XRRequestTrackingState[XRRequestTrackingState[\"Submitted\"] = 1] = \"Submitted\";\n XRRequestTrackingState[XRRequestTrackingState[\"Resolved\"] = 2] = \"Resolved\";\n XRRequestTrackingState[XRRequestTrackingState[\"Rejected\"] = 3] = \"Rejected\";\n XRRequestTrackingState[XRRequestTrackingState[\"Destroyed\"] = 4] = \"Destroyed\";\n XRRequestTrackingState[XRRequestTrackingState[\"WaitingDestroy\"] = 5] = \"WaitingDestroy\";\n return XRRequestTrackingState;\n}({});\n\n/**\n * The base class of XR trackable manager.\n */ var XRTrackableFeature = /*#__PURE__*/ function(XRFeature) {\n _inherits(XRTrackableFeature, XRFeature);\n function XRTrackableFeature() {\n var _this;\n _this = XRFeature.apply(this, arguments) || this, _this._requestTrackings = [], _this._tracked = [], _this._added = [], _this._updated = [], _this._removed = [], _this._statusSnapshot = {}, _this._listeners = new SafeLoopArray();\n return _this;\n }\n var _proto = XRTrackableFeature.prototype;\n /**\n * Add a listening function for tracked object changes.\n * @param listener - The listening function\n */ _proto.addChangedListener = function addChangedListener(listener) {\n this._listeners.push({\n fn: listener\n });\n };\n /**\n * Remove a listening function of tracked object changes.\n * @param listener - The listening function\n */ _proto.removeChangedListener = function removeChangedListener(listener) {\n this._listeners.findAndRemove(function(value) {\n return value.fn === listener ? value.destroyed = true : false;\n });\n };\n _proto._onUpdate = function _onUpdate() {\n var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;\n var platformFrame = platformSession.frame;\n var _this = this, platformFeature = _this._platformFeature, requestTrackings = _this._requestTrackings, statusSnapshot = _this._statusSnapshot, allTracked = _this._tracked, added = _this._added, updated = _this._updated, removed = _this._removed;\n if (!platformFrame || !requestTrackings.length) {\n return;\n }\n if (!platformFeature.checkAvailable(platformSession, platformFrame, requestTrackings)) {\n return;\n }\n added.length = updated.length = removed.length = 0;\n platformFeature.getTrackedResult(platformSession, platformFrame, requestTrackings, this._generateTracked);\n for(var i = 0, n = requestTrackings.length; i < n; i++){\n var requestTracking = requestTrackings[i];\n switch(requestTracking.state){\n case XRRequestTrackingState.Destroyed:\n var destroyedTracked = requestTracking.tracked;\n for(var j = 0, n1 = destroyedTracked.length; j < n1; j++){\n var tracked = destroyedTracked[j];\n var trackId = tracked.id;\n if (statusSnapshot[trackId] === XRTrackingState.Tracking) {\n removed.push(tracked);\n allTracked.splice(allTracked.indexOf(tracked), 1);\n }\n statusSnapshot[trackId] = XRTrackingState.NotTracking;\n }\n break;\n case XRRequestTrackingState.Resolved:\n var tracked1 = requestTracking.tracked;\n for(var j1 = 0, n2 = tracked1.length; j1 < n2; j1++){\n var trackedObject = tracked1[j1];\n var trackId1 = trackedObject.id;\n if (trackedObject.state === XRTrackingState.Tracking) {\n if (statusSnapshot[trackId1] === XRTrackingState.Tracking) {\n updated.push(trackedObject);\n } else {\n added.push(trackedObject);\n statusSnapshot[trackId1] = XRTrackingState.Tracking;\n allTracked.push(trackedObject);\n }\n } else {\n if (statusSnapshot[trackId1] === XRTrackingState.Tracking) {\n removed.push(trackedObject);\n allTracked.splice(allTracked.indexOf(trackedObject), 1);\n }\n statusSnapshot[trackId1] = trackedObject.state;\n }\n }\n break;\n }\n }\n for(var i1 = requestTrackings.length - 1; i1 >= 0; i1--){\n requestTrackings[i1].state === XRRequestTrackingState.Destroyed && requestTrackings.splice(i1, 1);\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n var listeners = this._listeners.getLoopArray();\n for(var i2 = 0, n3 = listeners.length; i2 < n3; i2++){\n var listener = listeners[i2];\n !listener.destroyed && listener.fn(added, updated, removed);\n }\n }\n };\n _proto._onSessionStop = function _onSessionStop() {\n this._added.length = this._updated.length = this._removed.length = 0;\n };\n _proto._onSessionExit = function _onSessionExit() {\n // prettier-ignore\n this._requestTrackings.length = this._tracked.length = this._added.length = this._updated.length = this._removed.length = 0;\n this._listeners.findAndRemove(function(value) {\n return value.destroyed = true;\n });\n };\n _proto._addRequestTracking = function _addRequestTracking(requestTracking) {\n var _this = this, platformFeature = _this._platformFeature;\n if (this._xrManager.sessionManager._platformSession && !platformFeature.canModifyRequestTrackingAfterInit) {\n throw new Error(XRFeatureType[this._type] + \" request tracking cannot be modified after initialization.\");\n }\n this._requestTrackings.push(requestTracking);\n platformFeature.onAddRequestTracking(requestTracking);\n };\n _proto._removeRequestTracking = function _removeRequestTracking(requestTracking) {\n var _this = this, platformFeature = _this._platformFeature;\n if (this._xrManager.sessionManager._platformSession && !platformFeature.canModifyRequestTrackingAfterInit) {\n throw new Error(XRFeatureType[this._type] + \" request tracking cannot be modified after initialization.\");\n }\n platformFeature.onDelRequestTracking(requestTracking);\n };\n _proto._removeAllRequestTrackings = function _removeAllRequestTrackings() {\n var _this = this, platformFeature = _this._platformFeature;\n if (this._xrManager.sessionManager._platformSession && !platformFeature.canModifyRequestTrackingAfterInit) {\n throw new Error(XRFeatureType[this._type] + \" request tracking cannot be modified after initialization.\");\n }\n var _this1 = this, requestTrackings = _this1._requestTrackings;\n for(var i = 0, n = requestTrackings.length; i < n; i++){\n platformFeature.onDelRequestTracking(requestTrackings[i]);\n }\n };\n return XRTrackableFeature;\n}(XRFeature);\nXRTrackableFeature._uuid = 0;\n\n/**\n * The base class of XR tracked object.\n */ var XRTracked = function XRTracked() {\n /** The pose of the trackable in XR space. */ this.pose = new XRPose();\n /** The tracking state of the trackable. */ this.state = XRTrackingState.NotTracking;\n};\n\n/**\n * Enum for the types of hit test that can be performed.\n * Note: currently only supports plane.\n */ var TrackableType = /*#__PURE__*/ function(TrackableType) {\n /** Tracked plane. */ TrackableType[TrackableType[\"Plane\"] = 1] = \"Plane\";\n /** All tracked objects. */ TrackableType[TrackableType[\"All\"] = 1] = \"All\";\n return TrackableType;\n}({});\n\n/**\n * XR hit result.\n * It is the detection result returned by using XR HitTest feature.\n */ var XRHitResult = function XRHitResult() {\n /** The position of the hit point. */ this.point = new Vector3();\n /** The normal of the hit point. */ this.normal = new Vector3();\n};\n\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n/**\n * Enumerates modes of plane in XR.\n */ var XRPlaneMode = /*#__PURE__*/ function(XRPlaneMode) {\n /** None. */ XRPlaneMode[XRPlaneMode[\"None\"] = 0] = \"None\";\n /** Horizontal */ XRPlaneMode[XRPlaneMode[\"Horizontal\"] = 1] = \"Horizontal\";\n /** Vertical */ XRPlaneMode[XRPlaneMode[\"Vertical\"] = 2] = \"Vertical\";\n /** Includes horizontal and vertical. */ XRPlaneMode[XRPlaneMode[\"EveryThing\"] = 3] = \"EveryThing\";\n return XRPlaneMode;\n}({});\n\n/**\n * @internal\n */ var XRRequestTracking = function XRRequestTracking() {\n /** The status of the current request tracking. */ this.state = XRRequestTrackingState.None;\n /** Tracked instances, make up from the tracking data returned by Session. */ this.tracked = [];\n};\n\n/**\n * The request plane in XR space.\n */ var XRRequestPlane = /*#__PURE__*/ function(XRRequestTracking) {\n _inherits(XRRequestPlane, XRRequestTracking);\n function XRRequestPlane(detectionMode) {\n var _this;\n _this = XRRequestTracking.call(this) || this, _this.detectionMode = detectionMode;\n return _this;\n }\n return XRRequestPlane;\n}(XRRequestTracking);\n\n/**\n * The tracked plane in XR space.\n */ var XRTrackedPlane = /*#__PURE__*/ function(XRTracked) {\n _inherits(XRTrackedPlane, XRTracked);\n function XRTrackedPlane() {\n var _this;\n _this = XRTracked.apply(this, arguments) || this, /** The points that make up this plane.\n * Note: These points are in the plane coordinate system,\n * and their Y coordinates are all zero.\n */ _this.polygon = [], /**\n * Whether this frame changes the attributes of the plane.\n * Note: Includes `polygon` but no `pose`.\n */ _this.attributesDirty = false;\n return _this;\n }\n return XRTrackedPlane;\n}(XRTracked);\n\nvar XRPlaneTracking = /*#__PURE__*/ function(XRTrackableFeature1) {\n _inherits(XRPlaneTracking, XRTrackableFeature1);\n function XRPlaneTracking(xrManager, detectionMode) {\n if (detectionMode === void 0) detectionMode = XRPlaneMode.EveryThing;\n var _this;\n _this = XRTrackableFeature1.call(this, xrManager, XRFeatureType.PlaneTracking, detectionMode) || this;\n _this._addRequestTracking(new XRRequestPlane(detectionMode));\n return _this;\n }\n var _proto = XRPlaneTracking.prototype;\n _proto._generateTracked = function _generateTracked() {\n var plane = new XRTrackedPlane();\n plane.id = XRTrackableFeature._uuid++;\n return plane;\n };\n _create_class(XRPlaneTracking, [\n {\n key: \"detectionMode\",\n get: /**\n * The plane detection mode.\n */ function get() {\n return this._requestTrackings[0].detectionMode;\n }\n },\n {\n key: \"trackedPlanes\",\n get: /**\n * The tracked planes.\n */ function get() {\n return this._tracked;\n }\n }\n ]);\n return XRPlaneTracking;\n}(XRTrackableFeature);\nXRPlaneTracking = __decorate([\n registerXRFeature(XRFeatureType.PlaneTracking)\n], XRPlaneTracking);\n\nvar XRHitTest = /*#__PURE__*/ function(XRFeature) {\n _inherits(XRHitTest, XRFeature);\n function XRHitTest(xrManager) {\n var _this;\n _this = XRFeature.call(this, xrManager, XRFeatureType.HitTest) || this, _this._tempRay = new Ray(), _this._tempPlane = new Plane(), _this._tempVec2 = new Vector2(), _this._tempVec30 = new Vector3(), _this._tempVec31 = new Vector3(), _this._tempVec32 = new Vector3(), _this._tempVec33 = new Vector3(), _this._tempVec34 = new Vector3(), _this._tempVec35 = new Vector3();\n return _this;\n }\n var _proto = XRHitTest.prototype;\n /**\n * Hit test.\n * @param ray - The ray to test\n * @param type - The type of hit test\n * @returns The hit result\n */ _proto.hitTest = function hitTest(ray, type) {\n var result = [];\n if (type & TrackableType.Plane) {\n this._hitTestPlane(ray, result);\n }\n return result;\n };\n /**\n * Screen hit test.\n * @param x - The x coordinate of the screen point\n * @param y - The y coordinate of the screen point\n * @param type - The type of hit test\n * @returns The hit result\n */ _proto.screenHitTest = function screenHitTest(x, y, type) {\n var _this = this, xrManager = _this._xrManager;\n if (xrManager.sessionManager.mode !== XRSessionMode.AR) {\n throw new Error(\"Only AR mode supports using screen ray hit test.\");\n }\n var _xrManager_inputManager_getTrackedDevice = xrManager.inputManager.getTrackedDevice(XRTrackedInputDevice.Camera), camera = _xrManager_inputManager_getTrackedDevice._camera;\n if (!camera) {\n throw new Error(\"No camera available.\");\n }\n var ray = camera.screenPointToRay(this._tempVec2.set(x, y), this._tempRay);\n return this.hitTest(ray, type);\n };\n _proto._hitTestPlane = function _hitTestPlane(ray, result) {\n var planeManager = this._xrManager.getFeature(XRPlaneTracking);\n if (!planeManager || !planeManager.enabled) {\n throw new Error(\"The plane estimation function needs to be turned on for plane hit test.\");\n }\n var _this = this, plane = _this._tempPlane, normal = _this._tempVec30, hitPoint = _this._tempVec31, hitPointInPlane = _this._tempVec32;\n var trackedPlanes = planeManager.trackedPlanes;\n for(var i = 0, n = trackedPlanes.length; i < n; i++){\n var trackedPlane = trackedPlanes[i];\n normal.set(0, 1, 0).transformNormal(trackedPlane.pose.matrix);\n plane.normal.copyFrom(normal);\n plane.distance = -Vector3.dot(normal, trackedPlane.pose.position);\n var distance = ray.intersectPlane(plane);\n if (distance >= 0) {\n ray.getPoint(distance, hitPoint);\n Vector3.transformToVec3(hitPoint, trackedPlane.pose.inverseMatrix, hitPointInPlane);\n // Check if the hit position is within the plane boundary.\n if (this._checkPointerWithinPlane(hitPointInPlane, trackedPlane)) {\n var hitResult = new XRHitResult();\n hitResult.point.copyFrom(hitPoint);\n hitResult.normal.copyFrom(normal);\n hitResult.distance = distance;\n hitResult.trackedObject = trackedPlane;\n hitResult.trackableType = TrackableType.Plane;\n result.push(hitResult);\n }\n }\n }\n };\n _proto._checkPointerWithinPlane = function _checkPointerWithinPlane(pointer, plane) {\n var _this = this, preToCur = _this._tempVec33, preToPointer = _this._tempVec34, cross = _this._tempVec35;\n var polygon = plane.polygon;\n var length = polygon.length;\n var prePoint = polygon[length - 1];\n var side = 0;\n for(var i = 0; i < length; i++){\n var curPoint = polygon[i];\n Vector3.subtract(curPoint, prePoint, preToCur);\n Vector3.subtract(pointer, prePoint, preToPointer);\n Vector3.cross(preToCur, preToPointer, cross);\n var y = cross.y;\n if (side === 0) {\n if (y > 0) {\n side = 1;\n } else if (y < 0) {\n side = -1;\n }\n } else {\n if (y > 0 && side < 0 || y < 0 && side > 0) {\n return false;\n }\n }\n prePoint = curPoint;\n }\n return true;\n };\n return XRHitTest;\n}(XRFeature);\nXRHitTest = __decorate([\n registerXRFeature(XRFeatureType.HitTest)\n], XRHitTest);\n\n/**\n * The anchor in XR space.\n */ var XRAnchor = /*#__PURE__*/ function(XRTracked) {\n _inherits(XRAnchor, XRTracked);\n function XRAnchor() {\n return XRTracked.apply(this, arguments) || this;\n }\n return XRAnchor;\n}(XRTracked);\n\n/**\n * The request anchor in XR space.\n */ var XRRequestAnchor = /*#__PURE__*/ function(XRRequestTracking) {\n _inherits(XRRequestAnchor, XRRequestTracking);\n function XRRequestAnchor(position, rotation) {\n var _this;\n _this = XRRequestTracking.call(this) || this, _this.position = position, _this.rotation = rotation;\n return _this;\n }\n return XRRequestAnchor;\n}(XRRequestTracking);\n\nvar XRAnchorTracking = /*#__PURE__*/ function(XRTrackableFeature1) {\n _inherits(XRAnchorTracking, XRTrackableFeature1);\n function XRAnchorTracking(xrManager) {\n var _this;\n _this = XRTrackableFeature1.call(this, xrManager, XRFeatureType.AnchorTracking) || this, _this._anchors = [];\n return _this;\n }\n var _proto = XRAnchorTracking.prototype;\n /**\n * Add a anchor in XR space.\n * @param anchor - The anchor to be added\n */ _proto.addAnchor = function addAnchor(position, rotation) {\n if (!this._enabled) {\n throw new Error(\"Cannot add an anchor from a disabled anchor manager.\");\n }\n var _this = this, anchors = _this._anchors;\n var requestAnchor = new XRRequestAnchor(position, rotation);\n var xrAnchor = this._generateTracked();\n requestAnchor.tracked[0] = xrAnchor;\n this._addRequestTracking(requestAnchor);\n anchors.push(xrAnchor);\n return xrAnchor;\n };\n /**\n * Remove a anchor in XR space.\n * @param anchor - The anchor to be removed\n */ _proto.removeAnchor = function removeAnchor(anchor) {\n if (!this._enabled) {\n throw new Error(\"Cannot remove an anchor from a disabled anchor manager.\");\n }\n var _this = this, requestTrackings = _this._requestTrackings, anchors = _this._anchors;\n for(var i = 0, n = requestTrackings.length; i < n; i++){\n var requestAnchor = requestTrackings[i];\n if (requestAnchor.tracked[0] === anchor) {\n this._removeRequestTracking(requestAnchor);\n break;\n }\n }\n anchors.splice(anchors.indexOf(anchor), 1);\n };\n /**\n * Remove all tracking anchors.\n */ _proto.clearAnchors = function clearAnchors() {\n if (!this._enabled) {\n throw new Error(\"Cannot remove anchors from a disabled anchor manager.\");\n }\n this._removeAllRequestTrackings();\n };\n _proto._generateTracked = function _generateTracked() {\n var anchor = new XRAnchor();\n anchor.id = XRTrackableFeature._uuid++;\n return anchor;\n };\n _create_class(XRAnchorTracking, [\n {\n key: \"trackingAnchors\",\n get: /**\n * The anchors to tracking.\n */ function get() {\n return this._anchors;\n }\n },\n {\n key: \"trackedAnchors\",\n get: /**\n * The tracked anchors.\n */ function get() {\n return this._tracked;\n }\n }\n ]);\n return XRAnchorTracking;\n}(XRTrackableFeature);\nXRAnchorTracking = __decorate([\n registerXRFeature(XRFeatureType.AnchorTracking)\n], XRAnchorTracking);\n\n/**\n * The request image in XR space.\n */ var XRRequestImage = /*#__PURE__*/ function(XRRequestTracking) {\n _inherits(XRRequestImage, XRRequestTracking);\n function XRRequestImage(image) {\n var _this;\n _this = XRRequestTracking.call(this) || this, _this.image = image;\n return _this;\n }\n return XRRequestImage;\n}(XRRequestTracking);\n\n/**\n * A tracked image in XR space.\n */ var XRTrackedImage = /*#__PURE__*/ function(XRTracked) {\n _inherits(XRTrackedImage, XRTracked);\n function XRTrackedImage() {\n return XRTracked.apply(this, arguments) || this;\n }\n return XRTrackedImage;\n}(XRTracked);\n\nvar XRImageTracking = /*#__PURE__*/ function(XRTrackableFeature1) {\n _inherits(XRImageTracking, XRTrackableFeature1);\n function XRImageTracking(xrManager, trackingImages) {\n var _this;\n _this = XRTrackableFeature1.call(this, xrManager, XRFeatureType.ImageTracking, trackingImages) || this;\n _this._trackingImages = trackingImages;\n var imageLength = trackingImages ? trackingImages.length : 0;\n if (imageLength > 0) {\n for(var i = 0, n = trackingImages.length; i < n; i++){\n _this._addRequestTracking(new XRRequestImage(trackingImages[i]));\n }\n } else {\n console.warn(\"No image to be tracked.\");\n }\n return _this;\n }\n var _proto = XRImageTracking.prototype;\n _proto._generateTracked = function _generateTracked() {\n var image = new XRTrackedImage();\n image.id = XRTrackableFeature._uuid++;\n return image;\n };\n _create_class(XRImageTracking, [\n {\n key: \"trackingImages\",\n get: /**\n * The image to tracking.\n */ function get() {\n return this._trackingImages;\n }\n },\n {\n key: \"trackedImages\",\n get: /**\n * The tracked images.\n */ function get() {\n return this._tracked;\n }\n }\n ]);\n return XRImageTracking;\n}(XRTrackableFeature);\nXRImageTracking = __decorate([\n registerXRFeature(XRFeatureType.ImageTracking)\n], XRImageTracking);\n\n/**\n * A reference image is an image to look for in the physical environment.\n */ var XRReferenceImage = function XRReferenceImage(name, imageSource, physicalWidth) {\n this.name = name;\n this.imageSource = imageSource;\n this.physicalWidth = physicalWidth;\n};\n\nvar XRReferenceImageDecoder = /*#__PURE__*/ function() {\n function XRReferenceImageDecoder() {}\n XRReferenceImageDecoder.decode = function decode(engine, bufferReader) {\n return new AssetPromise(function(resolve, reject) {\n var physicalWidth = bufferReader.nextFloat32();\n bufferReader.nextUint8();\n var img = new Image();\n img.onload = function() {\n resolve(new XRReferenceImage(\"\", img, physicalWidth));\n };\n img.src = URL.createObjectURL(new window.Blob([\n bufferReader.nextImagesData(1)[0]\n ]));\n });\n };\n return XRReferenceImageDecoder;\n}();\nXRReferenceImageDecoder = __decorate([\n decoder(\"XRReferenceImage\")\n], XRReferenceImageDecoder);\n\nfunction _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar XRReferenceImageLoader = /*#__PURE__*/ function(Loader) {\n _inherits(XRReferenceImageLoader, Loader);\n function XRReferenceImageLoader() {\n return Loader.apply(this, arguments) || this;\n }\n var _proto = XRReferenceImageLoader.prototype;\n _proto.load = function load(item, resourceManager) {\n return new AssetPromise(function(resolve, reject) {\n resourceManager// @ts-ignore\n ._request(item.url, _extends({}, item, {\n type: \"arraybuffer\"\n })).then(function(data) {\n decode(data, resourceManager.engine).then(function(referenceImage) {\n resolve(referenceImage);\n });\n }).catch(reject);\n });\n };\n return XRReferenceImageLoader;\n}(Loader);\nXRReferenceImageLoader = __decorate([\n resourceLoader(\"XRReferenceImage\", [])\n], XRReferenceImageLoader);\n\nexport { TrackableType, XRAnchor, XRAnchorTracking, XRCamera, XRCameraManager, XRController, XRFeature, XRFeatureType, XRHitResult, XRHitTest, XRImageTracking, XRInputButton, XRInputEventType, XRInputManager, XRPlaneMode, XRPlaneTracking, XRPose, XRReferenceImage, XRReferenceImageDecoder, XRReferenceImageLoader, XRRequestTrackingState, XRSessionManager, XRSessionMode, XRSessionState, XRTargetRayMode, XRTrackableFeature, XRTracked, XRTrackedImage, XRTrackedInputDevice, XRTrackedPlane, XRTrackingState };\n//# sourceMappingURL=module.js.map\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","import { XRTrackedInputDevice } from \"@galacean/engine-xr\";\n\nexport function parseXRMode(mode: number): XRSessionMode | null {\n switch (mode) {\n case 1:\n return \"immersive-ar\";\n case 2:\n return \"immersive-vr\";\n default:\n return null;\n }\n}\n\nexport function getInputSource(inputSource: XRInputSource): XRTrackedInputDevice {\n let type: number;\n switch (inputSource.targetRayMode) {\n case \"gaze\":\n break;\n case \"screen\":\n return XRTrackedInputDevice.Controller;\n case \"tracked-pointer\":\n if (inputSource.hand) {\n switch (inputSource.handedness) {\n case \"left\":\n return XRTrackedInputDevice.LeftHand;\n case \"right\":\n return XRTrackedInputDevice.RightHand;\n }\n } else {\n switch (inputSource.handedness) {\n case \"left\":\n return XRTrackedInputDevice.LeftController;\n case \"right\":\n return XRTrackedInputDevice.RightController;\n }\n }\n break;\n default:\n break;\n }\n return type;\n}\n\nexport function viewToCamera(type: XREye): XRTrackedInputDevice {\n switch (type) {\n case \"left\":\n return XRTrackedInputDevice.LeftCamera;\n case \"right\":\n return XRTrackedInputDevice.RightCamera;\n default:\n return XRTrackedInputDevice.Camera;\n }\n}\n","import { IXRCamera, IXRController, IXRFrame, IXRInput } from \"@galacean/engine-design\";\nimport { Vector3 } from \"@galacean/engine-math\";\nimport { XRTrackedInputDevice, XRTrackingState } from \"@galacean/engine-xr\";\nimport { getInputSource, viewToCamera } from \"./Util\";\nimport { WebXRSession } from \"./WebXRSession\";\n\nexport class WebXRFrame implements IXRFrame {\n /** @internal */\n _platformFrame: XRFrame;\n private _session: WebXRSession;\n\n updateInputs(inputs: IXRInput[]): void {\n if (!this._platformFrame) return;\n this._updateController(inputs);\n this._updateCamera(inputs);\n }\n\n private _updateController(inputs: IXRInput[]) {\n const { _platformFrame: frame } = this;\n const { _platformSession: session, _platformReferenceSpace: referenceSpace } = this._session;\n const { inputSources } = session;\n for (let i = 0, n = inputSources.length; i < n; i++) {\n const inputSource = inputSources[i];\n const type = getInputSource(inputSource);\n const input = <IXRController>inputs[type];\n switch (inputSource.targetRayMode) {\n case \"screen\":\n case \"tracked-pointer\":\n const { gripSpace, targetRaySpace } = inputSource;\n if (gripSpace) {\n const { transform, emulatedPosition } = frame.getPose(gripSpace, referenceSpace);\n if (transform) {\n const { gripPose } = input;\n gripPose.matrix.copyFromArray(transform.matrix);\n gripPose.position.copyFrom(transform.position);\n gripPose.rotation.copyFrom(transform.orientation);\n }\n input.trackingState = emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;\n }\n if (targetRaySpace) {\n const { transform, emulatedPosition } = frame.getPose(targetRaySpace, referenceSpace);\n if (transform) {\n const { targetRayPose } = input;\n targetRayPose.matrix.copyFromArray(transform.matrix);\n targetRayPose.position.copyFrom(transform.position);\n targetRayPose.rotation.copyFrom(transform.orientation);\n input.trackingState = emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;\n }\n }\n break;\n case \"gaze\":\n break;\n default:\n break;\n }\n }\n }\n\n private _updateCamera(inputs: IXRInput[]) {\n const { _platformFrame: frame } = this;\n const {\n _platformReferenceSpace: referenceSpace,\n _platformLayer: layer,\n framebufferWidth,\n framebufferHeight\n } = this._session;\n const viewerPose = frame.getViewerPose(referenceSpace);\n if (viewerPose) {\n let hadUpdateCenterViewer = false;\n const { views, emulatedPosition } = viewerPose;\n for (let i = 0, n = views.length; i < n; i++) {\n const view = views[i];\n const type = viewToCamera(view.eye);\n const { transform } = views[i];\n if (type === XRTrackedInputDevice.Camera) {\n hadUpdateCenterViewer ||= true;\n }\n const xrCamera = <IXRCamera>inputs[type];\n const { pose } = xrCamera;\n pose.matrix.copyFromArray(transform.matrix);\n pose.position.copyFrom(transform.position);\n pose.rotation.copyFrom(transform.orientation);\n xrCamera.projectionMatrix.copyFromArray(view.projectionMatrix);\n xrCamera.trackingState = emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;\n const xrViewport = layer.getViewport(view);\n const width = xrViewport.width / framebufferWidth;\n const height = xrViewport.height / framebufferHeight;\n const x = xrViewport.x / framebufferWidth;\n const y = 1 - xrViewport.y / framebufferHeight - height;\n xrCamera.viewport.set(x, y, width, height);\n }\n\n if (!hadUpdateCenterViewer) {\n const leftCameraDevice = <IXRCamera>inputs[XRTrackedInputDevice.LeftCamera];\n const rightCameraDevice = <IXRCamera>inputs[XRTrackedInputDevice.RightCamera];\n const cameraDevice = <IXRCamera>inputs[XRTrackedInputDevice.Camera];\n const { pose: leftCameraPose } = leftCameraDevice;\n const { pose: rightCameraPose } = rightCameraDevice;\n const { pose: cameraPose } = cameraDevice;\n cameraPose.rotation.copyFrom(leftCameraPose.rotation);\n const { position, matrix } = cameraPose;\n Vector3.add(leftCameraPose.position, rightCameraPose.position, position);\n position.scale(0.5);\n matrix.copyFrom(leftCameraPose.matrix);\n const { elements } = matrix;\n elements[12] = position.x;\n elements[13] = position.y;\n elements[14] = position.z;\n cameraDevice.projectionMatrix.copyFrom(leftCameraDevice.projectionMatrix);\n cameraDevice.trackingState = emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;\n cameraDevice.viewport =\n leftCameraDevice.viewport.width && leftCameraDevice.viewport.height\n ? leftCameraDevice.viewport\n : rightCameraDevice.viewport;\n }\n }\n }\n\n constructor(session: WebXRSession) {\n this._session = session;\n }\n}\n","import { IXRInputEvent, IXRSession } from \"@galacean/engine-design\";\nimport { XRInputEventType, XRTargetRayMode, XRTrackedInputDevice } from \"@galacean/engine-xr\";\nimport { getInputSource } from \"./Util\";\nimport { WebXRFrame } from \"./WebXRFrame\";\n\nexport class WebXRSession implements IXRSession {\n requestAnimationFrame: (callback: FrameRequestCallback) => number;\n cancelAnimationFrame: (id: number) => void;\n /** @internal */\n _onSessionExitCallBack: () => void;\n\n /** @internal */\n _platformSession: XRSession;\n /** @internal */\n _platformLayer: XRWebGLLayer;\n /** @internal */\n _platformReferenceSpace: XRReferenceSpace;\n\n private _frame: WebXRFrame;\n private _events: IXRInputEvent[] = [];\n private _screenPointers: XRInputSource[] = [];\n private _inputEventTypeMap: Record<string, number> = {\n selectstart: XRInputEventType.SelectStart,\n select: XRInputEventType.Select,\n selectend: XRInputEventType.SelectEnd,\n squeezestart: XRInputEventType.SqueezeStart,\n squeeze: XRInputEventType.Squeeze,\n squeezeend: XRInputEventType.SqueezeEnd\n };\n private _targetRayModeMap: Record<string, number> = {\n gaze: XRTargetRayMode.Gaze,\n \"tracked-pointer\": XRTargetRayMode.TrackedPointer,\n screen: XRTargetRayMode.Screen\n };\n\n get frame(): WebXRFrame {\n return this._frame;\n }\n\n get framebuffer(): WebGLFramebuffer {\n return this._platformLayer.framebuffer;\n }\n\n get framebufferWidth(): number {\n return this._platformLayer.framebufferWidth;\n }\n\n get framebufferHeight(): number {\n return this._platformLayer.framebufferHeight;\n }\n\n get frameRate(): number {\n return this._platformSession.frameRate;\n }\n\n get supportedFrameRates(): Float32Array {\n return this._platformSession.supportedFrameRates;\n }\n\n get events(): IXRInputEvent[] {\n const { _events: events } = this;\n // Select event does not dispatch the move event, so we need to simulate dispatching the move here.\n const { _screenPointers: screenPointers } = this;\n for (let i = 0; i < screenPointers.length; i++) {\n const inputSource = screenPointers[i];\n if (!inputSource) continue;\n const { axes } = inputSource.gamepad;\n const event = {\n type: XRInputEventType.Select,\n targetRayMode: XRTargetRayMode.Screen,\n input: XRTrackedInputDevice.Controller,\n id: i,\n x: axes[0],\n y: axes[1]\n };\n events.push(event);\n }\n return events;\n }\n\n constructor(session: XRSession, layer: XRWebGLLayer, referenceSpace: XRReferenceSpace) {\n this._frame = new WebXRFrame(this);\n this._platformSession = session;\n this._platformLayer = layer;\n this._platformReferenceSpace = referenceSpace;\n const xrRequestAnimationFrame = session.requestAnimationFrame.bind(session);\n const onFrame = function (time: number, frame: XRFrame, callback: FrameRequestCallback) {\n this._frame._platformFrame = frame;\n callback(time);\n }.bind(this);\n this.requestAnimationFrame = (callback: FrameRequestCallback) => {\n return xrRequestAnimationFrame((time: number, frame: XRFrame) => {\n onFrame(time, frame, callback);\n });\n };\n this.cancelAnimationFrame = session.cancelAnimationFrame.bind(session);\n this._onSessionEvent = this._onSessionEvent.bind(this);\n this._onSessionExit = this._onSessionExit.bind(this);\n }\n\n getFixedFoveation(): number {\n return this._platformLayer.fixedFoveation;\n }\n\n setFixedFoveation(value: number) {\n this._platformLayer.fixedFoveation = value;\n }\n\n start(): void {}\n\n stop(): void {\n this._frame._platformFrame = null;\n }\n\n end(): Promise<void> {\n this._frame._platformFrame = null;\n return this._platformSession.end();\n }\n\n setSessionExitCallBack(onSessionExitCallBack: () => void): void {\n this._onSessionExitCallBack = onSessionExitCallBack;\n }\n\n addEventListener(): void {\n const { _onSessionEvent: onSessionEvent, _platformSession: session } = this;\n session.addEventListener(\"select\", onSessionEvent);\n session.addEventListener(\"selectstart\", onSessionEvent);\n session.addEventListener(\"selectend\", onSessionEvent);\n session.addEventListener(\"squeeze\", onSessionEvent);\n session.addEventListener(\"squeezestart\", onSessionEvent);\n session.addEventListener(\"squeezeend\", onSessionEvent);\n session.addEventListener(\"end\", this._onSessionExit);\n }\n\n removeEventListener(): void {\n const { _onSessionEvent: onSessionEvent, _platformSession: session } = this;\n session.removeEventListener(\"select\", onSessionEvent);\n session.removeEventListener(\"selectstart\", onSessionEvent);\n session.removeEventListener(\"selectend\", onSessionEvent);\n session.removeEventListener(\"squeeze\", onSessionEvent);\n session.removeEventListener(\"squeezestart\", onSessionEvent);\n session.removeEventListener(\"squeezeend\", onSessionEvent);\n session.removeEventListener(\"end\", this._onSessionExit);\n this._events.length = 0;\n }\n\n resetEvents(): void {\n this._events.length = 0;\n }\n\n private _onSessionExit(): void {\n if (this._onSessionExitCallBack) {\n this._onSessionExitCallBack();\n this._onSessionExitCallBack = null;\n }\n }\n\n private _onSessionEvent(inputSourceEvent: XRInputSourceEvent): void {\n const { inputSource } = inputSourceEvent;\n const event: IXRInputEvent = {\n type: this._inputEventTypeMap[inputSourceEvent.type],\n input: getInputSource(inputSource),\n targetRayMode: this._targetRayModeMap[inputSource.targetRayMode]\n };\n if (event.targetRayMode === XRTargetRayMode.Screen) {\n const { _screenPointers: screenPointers } = this;\n const { axes } = inputSource.gamepad;\n event.x = axes[0];\n event.y = axes[1];\n switch (event.type) {\n case XRInputEventType.SelectStart:\n let idx = -1;\n let emptyIdx = -1;\n for (let i = screenPointers.length - 1; i >= 0; i--) {\n const pointer = screenPointers[i];\n if (pointer === inputSource) {\n idx = i;\n break;\n }\n if (!pointer) {\n emptyIdx = i;\n }\n }\n if (idx === -1) {\n if (emptyIdx === -1) {\n idx = screenPointers.push(inputSource) - 1;\n } else {\n idx = emptyIdx;\n screenPointers[emptyIdx] = inputSource;\n }\n }\n event.id = idx;\n break;\n case XRInputEventType.SelectEnd:\n for (let i = screenPointers.length - 1; i >= 0; i--) {\n if (screenPointers[i] === inputSource) {\n screenPointers[i] = null;\n event.id = i;\n }\n }\n break;\n default:\n break;\n }\n }\n this._events.push(event);\n }\n}\n","import { IHardwareRenderer, IXRDevice } from \"@galacean/engine-design\";\nimport { XRFeatureType, XRSessionMode } from \"@galacean/engine-xr\";\nimport { parseXRMode } from \"./Util\";\nimport { WebXRSession } from \"./WebXRSession\";\nimport { WebXRFeature } from \"./feature/WebXRFeature\";\n\nexport class WebXRDevice implements IXRDevice {\n /** @internal */\n static _platformFeatureMap: PlatformFeatureConstructor[] = [];\n\n isSupportedSessionMode(mode: XRSessionMode): Promise<void> {\n return new Promise((resolve, reject: (reason: Error) => void) => {\n if (!window.isSecureContext) {\n reject(new Error(\"WebXR is available only in secure contexts (HTTPS).\"));\n return;\n }\n if (!navigator.xr) {\n reject(new Error(\"WebXR isn't available\"));\n return;\n }\n navigator.xr.isSessionSupported(parseXRMode(mode)).then((isSupported: boolean) => {\n isSupported ? resolve() : reject(new Error(\"The current context doesn't support WebXR.\"));\n });\n });\n }\n\n isSupportedFeature(type: XRFeatureType): boolean {\n switch (type) {\n case XRFeatureType.HitTest:\n case XRFeatureType.PlaneTracking:\n return typeof XRPlane !== \"undefined\";\n case XRFeatureType.AnchorTracking:\n return typeof XRAnchor !== \"undefined\";\n case XRFeatureType.ImageTracking:\n // @ts-ignore\n return typeof XRImageTrackingResult !== \"undefined\";\n }\n }\n\n createPlatformFeature(type: XRFeatureType, ...args: any[]): WebXRFeature {\n const platformFeatureConstructor = WebXRDevice._platformFeatureMap[type];\n return platformFeatureConstructor ? new platformFeatureConstructor(...args) : null;\n }\n\n requestSession(rhi: IHardwareRenderer, mode: XRSessionMode, platformFeatures: WebXRFeature[]): Promise<WebXRSession> {\n return new Promise((resolve, reject) => {\n const sessionMode = parseXRMode(mode);\n const options: XRSessionInit = { requiredFeatures: [\"local\"], optionalFeatures: [] };\n const promiseArr = [];\n for (let i = 0, n = platformFeatures.length; i < n; i++) {\n const promise = platformFeatures[i]._assembleOptions(options);\n promise && promiseArr.push(promise);\n }\n Promise.all(promiseArr).then(() => {\n navigator.xr.requestSession(sessionMode, options).then((session) => {\n const { gl } = rhi;\n const attributes = gl.getContextAttributes();\n if (!attributes) {\n reject(Error(\"GetContextAttributes Error!\"));\n }\n gl.makeXRCompatible().then(() => {\n const scaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor(session);\n let layer: XRWebGLLayer;\n if (session.renderState.layers === undefined || !!!rhi.isWebGL2) {\n const layerInit = {\n antialias: session.renderState.layers === undefined ? attributes.antialias : true,\n alpha: true,\n depth: attributes.depth,\n stencil: attributes.stencil,\n framebufferScaleFactor: scaleFactor\n };\n layer = new XRWebGLLayer(session, gl, layerInit);\n session.updateRenderState({\n baseLayer: layer\n });\n } else {\n layer = new XRWebGLLayer(session, gl);\n session.updateRenderState({\n layers: [layer]\n });\n }\n session.requestReferenceSpace(\"local\").then((referenceSpace: XRReferenceSpace) => {\n resolve(new WebXRSession(session, layer, referenceSpace));\n }, reject);\n }, reject);\n }, reject);\n }, reject);\n });\n }\n}\n\ntype PlatformFeatureConstructor = new (...args: any[]) => WebXRFeature;\nexport function registerXRPlatformFeature(type: XRFeatureType) {\n return (platformFeatureConstructor: PlatformFeatureConstructor) => {\n WebXRDevice._platformFeatureMap[type] = platformFeatureConstructor;\n };\n}\n","import { IXRRequestTracking, IXRTrackablePlatformFeature, IXRTracked } from \"@galacean/engine-design\";\nimport { XRRequestTrackingState } from \"@galacean/engine-xr\";\nimport { WebXRFrame } from \"../WebXRFrame\";\nimport { WebXRSession } from \"../WebXRSession\";\nimport { WebXRFeature } from \"./WebXRFeature\";\n\n/**\n * @internal\n */\nexport abstract class WebXRTrackableFeature<T extends IXRTracked, K extends IXRRequestTracking<T>>\n extends WebXRFeature\n implements IXRTrackablePlatformFeature<T, K>\n{\n get canModifyRequestTrackingAfterInit(): boolean {\n return false;\n }\n\n abstract getTrackedResult(\n session: WebXRSession,\n frame: WebXRFrame,\n requestTrackings: K[],\n generateTracked: () => T\n ): void;\n\n abstract checkAvailable(session: WebXRSession, frame: WebXRFrame, requestTrackings: K[]): boolean;\n\n onAddRequestTracking(requestTracking: K): void {}\n\n onDelRequestTracking(requestTracking: K): void {\n requestTracking.state = XRRequestTrackingState.Destroyed;\n }\n}\n","import { IXRPlatformFeature } from \"@galacean/engine-design\";\n\n/**\n * @internal\n */\nexport abstract class WebXRFeature implements IXRPlatformFeature {\n /** @internal */\n abstract _assembleOptions(options: XRSessionInit): Promise<void> | void;\n}\n","import { IXRRequestAnchor, IXRTracked } from \"@galacean/engine-design\";\nimport { XRFeatureType, XRRequestTrackingState, XRTrackingState } from \"@galacean/engine-xr\";\nimport { registerXRPlatformFeature } from \"../WebXRDevice\";\nimport { WebXRFrame } from \"../WebXRFrame\";\nimport { WebXRSession } from \"../WebXRSession\";\nimport { WebXRTrackableFeature } from \"./WebXRTrackableFeature\";\n/**\n * WebXR implementation of XRPlatformAnchorTracking.\n */\n@registerXRPlatformFeature(XRFeatureType.AnchorTracking)\nexport class WebXRAnchorTracking extends WebXRTrackableFeature<IXRTracked, IWebXRRequestTrackingAnchor> {\n checkAvailable(session: WebXRSession, frame: WebXRFrame, requestTrackings: IWebXRRequestTrackingAnchor[]): boolean {\n if (!frame._platformFrame) return false;\n for (let i = 0, n = requestTrackings.length; i < n; i++) {\n const requestTracking = requestTrackings[i];\n if (requestTracking.state === XRRequestTrackingState.None) {\n this._addAnchor(session, frame, requestTracking);\n }\n }\n return true;\n }\n\n getTrackedResult(session: WebXRSession, frame: WebXRFrame, requestTrackings: IWebXRRequestTrackingAnchor[]): void {\n const { _platformReferenceSpace: platformReferenceSpace } = session;\n const { _platformFrame: platformFrame } = frame;\n const { trackedAnchors } = platformFrame;\n for (let i = 0, n = requestTrackings.length; i < n; i++) {\n const requestTracking = requestTrackings[i];\n if (requestTracking.state !== XRRequestTrackingState.Resolved) continue;\n const tracked = requestTracking.tracked[0];\n if (trackedAnchors.has(requestTracking.xrAnchor)) {\n const emulated = this._updateTrackedAnchor(platformFrame, platformReferenceSpace, requestTracking);\n if (emulated) {\n if (tracked.state === XRTrackingState.Tracking) {\n tracked.state = XRTrackingState.TrackingLost;\n }\n } else {\n tracked.state = XRTrackingState.Tracking;\n }\n } else {\n tracked.state = XRTrackingState.NotTracking;\n }\n }\n }\n\n override get canModifyRequestTrackingAfterInit(): boolean {\n return true;\n }\n\n override onDelRequestTracking(requestTracking: IWebXRRequestTrackingAnchor): void {\n switch (requestTracking.state) {\n case XRRequestTrackingState.Submitted:\n requestTracking.state = XRRequestTrackingState.WaitingDestroy;\n break;\n case XRRequestTrackingState.Resolved:\n requestTracking.xrAnchor.delete();\n requestTracking.state = XRRequestTrackingState.Destroyed;\n break;\n default:\n requestTracking.state = XRRequestTrackingState.Destroyed;\n break;\n }\n }\n\n /**\n * @internal\n */\n _assembleOptions(options: XRSessionInit): void {\n options.optionalFeatures.push(\"anchors\");\n }\n\n private _addAnchor(session: WebXRSession, frame: WebXRFrame, requestTracking: IWebXRRequestTrackingAnchor): void {\n if (!session || !frame) {\n return;\n }\n requestTracking.state = XRRequestTrackingState.Submitted;\n const { position, rotation } = requestTracking;\n const { _platformFrame: platformFrame } = frame;\n const { _platformReferenceSpace: platformReferenceSpace } = session;\n platformFrame\n .createAnchor(\n new XRRigidTransform(\n { x: position.x, y: position.y, z: position.z },\n { x: rotation.x, y: rotation.y, z: rotation.z, w: rotation.w }\n ),\n platformReferenceSpace\n )\n .then(\n (xrAnchor) => {\n if (requestTracking.state === XRRequestTrackingState.WaitingDestroy) {\n xrAnchor.delete();\n requestTracking.state = XRRequestTrackingState.Destroyed;\n } else {\n requestTracking.xrAnchor = xrAnchor;\n requestTracking.state = XRRequestTrackingState.Resolved;\n }\n },\n () => {\n if (requestTracking.state === XRRequestTrackingState.WaitingDestroy) {\n requestTracking.state = XRRequestTrackingState.Destroyed;\n } else {\n requestTracking.state = XRRequestTrackingState.Rejected;\n }\n }\n );\n }\n\n private _updateTrackedAnchor(frame: XRFrame, space: XRSpace, requestTracking: IWebXRRequestTrackingAnchor): boolean {\n const { xrAnchor } = requestTracking;\n const xrPose = frame.getPose(xrAnchor.anchorSpace, space);\n const { transform } = xrPose;\n const { pose } = requestTracking.tracked[0];\n pose.matrix.copyFromArray(transform.matrix);\n pose.rotation.copyFrom(transform.orientation);\n pose.position.copyFrom(transform.position);\n return xrPose.emulatedPosition;\n }\n}\n\ninterface IWebXRRequestTrackingAnchor extends IXRRequestAnchor {\n xrAnchor: XRAnchor;\n}\n","import { IXRReferenceImage, IXRRequestImage, IXRTrackedImage } from \"@galacean/engine-design\";\nimport { XRFeatureType, XRRequestTrackingState, XRTrackingState } from \"@galacean/engine-xr\";\nimport { registerXRPlatformFeature } from \"../WebXRDevice\";\nimport { WebXRFrame } from \"../WebXRFrame\";\nimport { WebXRSession } from \"../WebXRSession\";\nimport { WebXRTrackableFeature } from \"./WebXRTrackableFeature\";\n\n/**\n * WebXR implementation of XRPlatformImageTracking.\n * Note: each tracked image can appear at most once in the tracking results.\n * If multiple copies of the same image exist in the user’s environment,\n * the device can choose an arbitrary instance to report a pose,\n * and this choice can change for future XRFrames.\n */\n@registerXRPlatformFeature(XRFeatureType.ImageTracking)\nexport class WebXRImageTracking extends WebXRTrackableFeature<IXRTrackedImage, IXRRequestImage> {\n private _images: IXRReferenceImage[];\n private _trackingScoreStatus: ImageTrackingScoreStatus = ImageTrackingScoreStatus.NotReceived;\n private _tempIdx: number = 0;\n private _tempArr: number[] = [];\n\n constructor(images: IXRReferenceImage[]) {\n super();\n this._images = images;\n }\n\n checkAvailable(session: WebXRSession, frame: WebXRFrame, requestTrackings: IXRRequestImage[]): boolean {\n if (!frame._platformFrame) return false;\n switch (this._trackingScoreStatus) {\n case ImageTrackingScoreStatus.NotReceived:\n this._requestTrackingScore(session, requestTrackings);\n return false;\n case ImageTrackingScoreStatus.Waiting:\n return false;\n }\n return true;\n }\n\n getTrackedResult(\n session: WebXRSession,\n frame: WebXRFrame,\n requestTrackings: IXRRequestImage[],\n generateTracked: () => IXRTrackedImage\n ): void {\n const { _platformReferenceSpace: platformReferenceSpace } = session;\n const { _platformFrame: platformFrame } = frame;\n const { _tempArr: tempArr } = this;\n const idx = ++this._tempIdx;\n // @ts-ignore\n const trackingResults = platformFrame.getImageTrackingResults();\n for (let i = 0, n = trackingResults.length; i < n; i++) {\n const trackingResult = trackingResults[i];\n const { index } = trackingResult;\n const requestTrackingImage = requestTrackings[index];\n if (requestTrackingImage) {\n let tracked = requestTrackingImage.tracked[0];\n if (!tracked) {\n tracked = requestTrackingImage.tracked[0] = generateTracked();\n tracked.referenceImage = requestTrackingImage.image;\n }\n if (trackingResult.trackingState === \"tracked\") {\n this._updateTrackedImage(platformFrame, platformReferenceSpace, tracked, trackingResult);\n tracked.state = XRTrackingState.Tracking;\n } else {\n tracked.state = XRTrackingState.TrackingLost;\n }\n tempArr[index] = idx;\n } else {\n console.warn(\"Images can not find \" + index);\n }\n }\n\n for (let i = 0, n = requestTrackings.length; i < n; i++) {\n if (tempArr[i] < idx) requestTrackings[i].tracked[0].state = XRTrackingState.NotTracking;\n }\n }\n\n override onAddRequestTracking(requestTracking: IXRRequestImage): void {\n requestTracking.state = XRRequestTrackingState.Submitted;\n }\n\n /**\n * @internal\n */\n _assembleOptions(options: XRSessionInit): Promise<void> | void {\n options.optionalFeatures.push(\"image-tracking\");\n const { _images: images } = this;\n const promiseArr: Promise<ImageBitmap>[] = [];\n if (images) {\n for (let i = 0, n = images.length; i < n; i++) {\n const referenceImage = images[i];\n const { imageSource } = images[i];\n if (!imageSource) {\n return Promise.reject(new Error(\"referenceImage[\" + referenceImage.name + \"].src is null\"));\n } else {\n promiseArr.push(createImageBitmap(imageSource));\n }\n }\n return new Promise((resolve, reject) => {\n // @ts-ignore\n const trackedImages = (options.trackedImages = []);\n Promise.all(promiseArr).then((bitmaps: ImageBitmap[]) => {\n for (let i = 0, n = bitmaps.length; i < n; i++) {\n trackedImages.push({\n image: bitmaps[i],\n widthInMeters: images[i].physicalWidth\n });\n }\n resolve();\n }, reject);\n });\n } else {\n return Promise.reject(new Error(\"Images.length is 0\"));\n }\n }\n\n private _requestTrackingScore(session: WebXRSession, requestTrackings: IXRRequestImage[]): void {\n this._trackingScoreStatus = ImageTrackingScoreStatus.Waiting;\n session._platformSession\n // @ts-ignore\n .getTrackedImageScores()\n .then((trackingScores: (\"untrackable\" | \"trackable\")[]) => {\n if (trackingScores) {\n for (let i = 0, n = trackingScores.length; i < n; i++) {\n const trackingScore = trackingScores[i];\n const requestTracking = requestTrackings[i];\n if (trackingScore === \"trackable\") {\n this._trackingScoreStatus = ImageTrackingScoreStatus.Received;\n requestTracking.state = XRRequestTrackingState.Resolved;\n } else {\n requestTracking.state = XRRequestTrackingState.Rejected;\n console.warn(requestTracking.image.name, \" unTrackable\");\n }\n }\n }\n });\n }\n\n private _updateTrackedImage(frame: XRFrame, space: XRSpace, trackedImage: IXRTrackedImage, trackingResult: any) {\n const { pose } = trackedImage;\n const { transform } = frame.getPose(trackingResult.imageSpace, space);\n pose.matrix.copyFromArray(transform.matrix);\n pose.rotation.copyFrom(transform.orientation);\n pose.position.copyFrom(transform.position);\n trackedImage.measuredPhysicalWidth = trackingResult.measuredWidthInMeters;\n }\n}\n\nenum ImageTrackingScoreStatus {\n NotReceived,\n Waiting,\n Received\n}\n","import { IXRRequestPlane, IXRTrackedPlane } from \"@galacean/engine-design\";\nimport { Vector3 } from \"@galacean/engine-math\";\nimport { XRFeatureType, XRPlaneMode, XRRequestTrackingState, XRTrackingState } from \"@galacean/engine-xr\";\nimport { registerXRPlatformFeature } from \"../WebXRDevice\";\nimport { WebXRFrame } from \"../WebXRFrame\";\nimport { WebXRSession } from \"../WebXRSession\";\nimport { WebXRTrackableFeature } from \"./WebXRTrackableFeature\";\n\n/**\n * WebXR implementation of XRPlatformPlaneTracking.\n */\n@registerXRPlatformFeature(XRFeatureType.PlaneTracking)\nexport class WebXRPlaneTracking extends WebXRTrackableFeature<IWebXRTrackedPlane, IXRRequestPlane> {\n private _lastDetectedPlanes: XRPlaneSet;\n\n constructor(detectedMode: number) {\n super();\n if (detectedMode !== XRPlaneMode.EveryThing) {\n console.warn(\"WebXR only support XRPlaneMode.EveryThing\");\n }\n }\n\n checkAvailable(session: WebXRSession, frame: WebXRFrame, requestTrackings: IXRRequestPlane[]): boolean {\n return !!frame._platformFrame;\n }\n\n getTrackedResult(\n session: WebXRSession,\n frame: WebXRFrame,\n requestTrackings: IXRRequestPlane[],\n generateTracked: () => IWebXRTrackedPlane\n ): void {\n const { _platformReferenceSpace: platformReferenceSpace } = session;\n const { _platformFrame: platformFrame } = frame;\n // @ts-ignore\n const detectedPlanes: XRPlaneSet = platformFrame.detectedPlanes || platformFrame.worldInformation?.detectedPlanes;\n const tracked = <IWebXRTrackedPlane[]>requestTrackings[0].tracked;\n for (let i = 0, n = tracked.length; i < n; i++) {\n const trackedPlane = tracked[i];\n if (detectedPlanes.has(trackedPlane.xrPlane)) {\n trackedPlane.state = XRTrackingState.Tracking;\n this._updatePlane(platformFrame, platformReferenceSpace, trackedPlane);\n } else {\n trackedPlane.state = XRTrackingState.NotTracking;\n }\n }\n\n const { _lastDetectedPlanes: lastDetectedPlanes } = this;\n detectedPlanes.forEach((xrPlane) => {\n if (!lastDetectedPlanes?.has(xrPlane)) {\n const plane = generateTracked();\n plane.xrPlane = xrPlane;\n plane.lastChangedTime = -1;\n this._updatePlane(platformFrame, platformReferenceSpace, plane);\n tracked.push(plane);\n }\n });\n this._lastDetectedPlanes = detectedPlanes;\n }\n\n override onAddRequestTracking(requestTracking: IXRRequestPlane): void {\n requestTracking.state = XRRequestTrackingState.Resolved;\n }\n\n /**\n * @internal\n */\n _assembleOptions(options: XRSessionInit): void {\n options.optionalFeatures.push(\"plane-detection\");\n }\n\n private _updatePlane(frame: XRFrame, space: XRSpace, trackedPlane: IWebXRTrackedPlane): void {\n const { pose, polygon, xrPlane } = trackedPlane;\n const planePose = frame.getPose(xrPlane.planeSpace, space);\n if (!planePose) return;\n const { transform, emulatedPosition } = planePose;\n trackedPlane.state = emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;\n trackedPlane.planeMode = xrPlane.orientation === \"horizontal\" ? XRPlaneMode.Horizontal : XRPlaneMode.Vertical;\n if (trackedPlane.lastChangedTime < xrPlane.lastChangedTime) {\n trackedPlane.lastChangedTime = xrPlane.lastChangedTime;\n trackedPlane.attributesDirty = true;\n const { polygon: oriPolygon } = xrPlane;\n for (let i = 0, n = (polygon.length = oriPolygon.length); i < n; i++) {\n (polygon[i] ||= new Vector3()).copyFrom(oriPolygon[i]);\n }\n } else {\n trackedPlane.attributesDirty = false;\n }\n pose.rotation.copyFrom(transform.orientation);\n pose.position.copyFrom(transform.position);\n pose.matrix.copyFromArray(transform.matrix);\n pose.inverseMatrix.copyFromArray(transform.inverse.matrix);\n }\n}\n\ninterface IWebXRTrackedPlane extends IXRTrackedPlane {\n xrPlane?: XRPlane;\n lastChangedTime?: number;\n}\n"],"names":["_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","Constructor","protoProps","staticProps","prototype","_set_prototype_of","o","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","create","constructor","value","__decorate","decorators","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","_is_native_reflect_construct","result","Boolean","valueOf","call","construct","_","right","Symbol","hasInstance","left","SuppressedError","obj","_construct","Parent","args","Class","a","push","apply","instance","Function","bind","parseXRMode","mode","getInputSource","inputSource","type","targetRayMode","XRTrackedInputDevice","Controller","hand","handedness","LeftHand","RightHand","LeftController","RightController","WebXRFrame","session","_session","updateInputs","inputs","_platformFrame","_updateController","_updateCamera","_proto","frame","_this","_this__session","_platformSession","_platformReferenceSpace","inputSources","n","input","gripSpace","targetRaySpace","getPose","referenceSpace","transform","emulatedPosition","gripPose","matrix","copyFromArray","position","copyFrom","rotation","orientation","trackingState","XRTrackingState","TrackingLost","Tracking","targetRayPose","_platformLayer","layer","framebufferWidth","framebufferHeight","viewerPose","getViewerPose","hadUpdateCenterViewer","views","view","viewToCamera","LeftCamera","RightCamera","Camera","eye","xrCamera","pose","projectionMatrix","xrViewport","getViewport","width","height","x","y","viewport","set","leftCameraDevice","rightCameraDevice","cameraDevice","leftCameraPose","rightCameraPose","cameraPose","Vector3","add","scale","elements","z","WebXRSession","_events","_screenPointers","_inputEventTypeMap","selectstart","XRInputEventType","SelectStart","select","Select","selectend","SelectEnd","squeezestart","SqueezeStart","squeeze","Squeeze","squeezeend","SqueezeEnd","_targetRayModeMap","gaze","XRTargetRayMode","Gaze","TrackedPointer","screen","Screen","_frame","xrRequestAnimationFrame","requestAnimationFrame","onFrame","time","callback","cancelAnimationFrame","_onSessionEvent","_onSessionExit","getFixedFoveation","fixedFoveation","setFixedFoveation","start","stop","end","setSessionExitCallBack","onSessionExitCallBack","_onSessionExitCallBack","addEventListener","onSessionEvent","removeEventListener","resetEvents","inputSourceEvent","event","screenPointers","axes","gamepad","idx","emptyIdx","pointer","id","get","framebuffer","frameRate","supportedFrameRates","events","_this1","WebXRDevice","isSupportedSessionMode","Promise","resolve","reject","window","isSecureContext","Error","navigator","xr","isSessionSupported","then","isSupported","isSupportedFeature","XRFeatureType","HitTest","PlaneTracking","XRPlane","AnchorTracking","XRAnchor","ImageTracking","XRImageTrackingResult","createPlatformFeature","_len","Array","_key","platformFeatureConstructor","_platformFeatureMap","requestSession","rhi","platformFeatures","sessionMode","options","requiredFeatures","optionalFeatures","promiseArr","promise","_assembleOptions","all","gl","attributes","getContextAttributes","makeXRCompatible","scaleFactor","XRWebGLLayer","getNativeFramebufferScaleFactor","undefined","renderState","layers","isWebGL2","updateRenderState","layerInit","antialias","alpha","depth","stencil","framebufferScaleFactor","baseLayer","requestReferenceSpace","registerXRPlatformFeature","WebXRTrackableFeature","WebXRFeature","onAddRequestTracking","requestTracking","onDelRequestTracking","state","XRRequestTrackingState","Destroyed","canModifyRequestTrackingAfterInit","WebXRAnchorTracking","checkAvailable","requestTrackings","None","_addAnchor","getTrackedResult","platformReferenceSpace","platformFrame","trackedAnchors","Resolved","tracked","has","xrAnchor","_updateTrackedAnchor","NotTracking","Submitted","WaitingDestroy","delete","createAnchor","XRRigidTransform","w","Rejected","space","xrPose","anchorSpace","WebXRImageTracking","images","_trackingScoreStatus","_tempIdx","_tempArr","_images","_requestTrackingScore","generateTracked","tempArr","trackingResults","getImageTrackingResults","trackingResult","index","requestTrackingImage","referenceImage","image","_updateTrackedImage","console","warn","imageSource","name","createImageBitmap","trackedImages","bitmaps","widthInMeters","physicalWidth","getTrackedImageScores","trackingScores","trackingScore","trackedImage","imageSpace","measuredPhysicalWidth","measuredWidthInMeters","WebXRPlaneTracking","detectedMode","XRPlaneMode","EveryThing","detectedPlanes","worldInformation","trackedPlane","xrPlane","_updatePlane","lastDetectedPlanes","_lastDetectedPlanes","forEach","plane","lastChangedTime","polygon","planePose","planeSpace","planeMode","Horizontal","Vertical","attributesDirty","oriPolygon","inverseMatrix","inverse"],"mappings":"6UAAA,SAASA,EAAkBC,CAAM,CAAEC,CAAK,EACpC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,MAAM,CAAED,IAAK,CACnC,IAAIE,EAAaH,CAAK,CAACC,EAAE,AACzBE,CAAAA,EAAWC,UAAU,CAAGD,EAAWC,UAAU,EAAI,CAAA,EACjDD,EAAWE,YAAY,CAAG,CAAA,EAEtB,UAAWF,GAAYA,CAAAA,EAAWG,QAAQ,CAAG,CAAA,CAAA,EAEjDC,OAAOC,cAAc,CAACT,EAAQI,EAAWM,GAAG,CAAEN,EACjD,CACL,CACA,SAASO,EAAcC,CAAW,CAAEC,CAAU,CAAEC,CAAW,EAIvD,OAHID,GAAYd,EAAkBa,EAAYG,SAAS,CAAEF,GACrDC,GAAaf,EAAkBa,EAAaE,GAEzCF,CACX,CChBA,SAASI,EAAkBC,CAAC,CAAEC,CAAC,EAO3B,MAAOF,AANPA,CAAAA,EAAoBR,OAAOW,cAAc,EAAI,SAAwBF,CAAC,CAAEC,CAAC,EAGrE,OAFAD,EAAEG,SAAS,CAAGF,EAEPD,CACf,CAAA,EAE6BA,EAAGC,EAChC,CCNA,SAASG,EAAUC,CAAQ,CAAEC,CAAU,EACnC,GAAI,AAAsB,YAAtB,OAAOA,GAA6BA,AAAe,OAAfA,EACpC,MAAM,AAAIC,UAAU,qDAGxBF,CAAAA,EAASP,SAAS,CAAGP,OAAOiB,MAAM,CAACF,GAAcA,EAAWR,SAAS,CAAE,CAAEW,YAAa,CAAEC,MAAOL,EAAUf,SAAU,CAAA,EAAMD,aAAc,CAAA,CAAM,CAAA,GAEzIiB,GAAYP,EAAkBM,EAAUC,EAChD,CC4CO,SAASK,EAAWC,CAAU,CAAE7B,CAAM,CAAEU,CAAG,CAAEoB,CAAI,EACtD,IAA2HC,EAAvHC,EAAIC,UAAU9B,MAAM,CAAE+B,EAAIF,EAAI,EAAIhC,EAAS8B,AAAS,OAATA,EAAgBA,EAAOtB,OAAO2B,wBAAwB,CAACnC,EAAQU,GAAOoB,EACrH,GAAI,AAAmB,UAAnB,OAAOM,SAAwB,AAA4B,YAA5B,OAAOA,QAAQC,QAAQ,CAAiBH,EAAIE,QAAQC,QAAQ,CAACR,EAAY7B,EAAQU,EAAKoB,QACpH,IAAK,IAAI5B,EAAI2B,EAAW1B,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAAS6B,CAAAA,EAAIF,CAAU,CAAC3B,EAAE,AAAD,GAAGgC,CAAAA,EAAI,AAACF,CAAAA,EAAI,EAAID,EAAEG,GAAKF,EAAI,EAAID,EAAE/B,EAAQU,EAAKwB,GAAKH,EAAE/B,EAAQU,EAAG,GAAMwB,CAAAA,EAChJ,OAAOF,EAAI,GAAKE,GAAK1B,OAAOC,cAAc,CAACT,EAAQU,EAAKwB,GAAIA,CAC9D,CC3DA,SAASI,IAKL,GAAI,CAGA,IAAIC,EAAS,CAACC,QAAQzB,SAAS,CAAC0B,OAAO,CAACC,IAAI,CAACN,QAAQO,SAAS,CAACH,QAAS,EAAE,CAAE,WAAW,GAC/F,CAAM,MAAOI,EAAG,CAAE,CACd,MAAO,AAACN,CAAAA,EAA+B,WACnC,MAAO,CAAC,CAACC,KAEjB,k0BCZQM,AAAS,SAAQ,AAAkB,aAAlB,OAAOC,QAA0BD,CAAK,CAACC,OAAOC,WAAW,CAAC,CACpE,CAAC,CAACF,CAAK,CAACC,OAAOC,WAAW,CAAC,IACxBC,eFoUK,AAA2B,YAA3B,OAAOC,iBAAiCA,uvgBGvU7CC,6HAGPA,CAHOA,YAGA,AAAkB,aAAlB,OAAOJ,QAA0BI,EAAIxB,WAAW,GAAKoB,OAAS,SAAW,OAAOI,ssLCHlG,SAASZ,KAKL,GAAI,CAGA,IAAIC,EAAS,CAACC,QAAQzB,SAAS,CAAC0B,OAAO,CAACC,IAAI,CAACN,QAAQO,SAAS,CAACH,QAAS,EAAE,CAAE,WAAW,GAC/F,CAAM,MAAOI,EAAG,CAAE,CACd,MAAO,AAACN,CAAAA,GAA+B,WACnC,MAAO,CAAC,CAACC,CACjB,CAAA,GACA,CCXA,SAASY,GAAWC,CAAM,CAAEC,CAAI,CAAEC,CAAK,EAenC,MAAOH,CAd6BA,GAAhCb,KAA6CF,QAAQO,SAAS,CAEjD,SAAmBS,CAAM,CAAEC,CAAI,CAAEC,CAAK,EAC/C,IAAIC,EAAI,CAAC,KAAK,CACdA,EAAEC,IAAI,CAACC,KAAK,CAACF,EAAGF,GAEhB,IAAIK,EAAW,GADGC,CAAAA,SAASC,IAAI,CAACH,KAAK,CAACL,EAAQG,EAAC,EAK/C,OAFID,GAAOtC,EAAkB0C,EAAUJ,EAAMvC,SAAS,EAE/C2C,CACnB,GAGsBD,KAAK,CAAC,KAAMxB,UAClC,CChBO,SAAS4B,GAAYC,CAAY,EACtC,OAAQA,GACN,KAAK,EACH,MAAO,cACT,MAAK,EACH,MAAO,cACT,SACE,OAAO,IACX,CACF,CAEO,SAASC,GAAeC,CAA0B,EACvD,IAAIC,EACJ,OAAQD,EAAYE,aAAa,EAC/B,IAAK,OACH,KACF,KAAK,SACH,OAAOC,EAAqBC,UAAU,AACxC,KAAK,kBACH,GAAIJ,EAAYK,IAAI,CAClB,OAAQL,EAAYM,UAAU,EAC5B,IAAK,OACH,OAAOH,EAAqBI,QAAQ,AACtC,KAAK,QACH,OAAOJ,EAAqBK,SAAS,AACzC,MAEA,OAAQR,EAAYM,UAAU,EAC5B,IAAK,OACH,OAAOH,EAAqBM,cAAc,AAC5C,KAAK,QACH,OAAON,EAAqBO,eAAe,AAC/C,CAKN,CACA,OAAOT,CACT,wy6BCnCO,IAAAU,gBAAA,WAAMA,SAAAA,EAgHCC,CAAqB,EAC/B,IAAI,CAACC,QAAQ,CAAGD,EAjHPD,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAKXG,EAAAA,YAIC,CAJDA,SAAaC,CAAkB,EACxB,IAAI,CAACC,cAAc,GACxB,IAAI,CAACC,iBAAiB,CAACF,GACvB,IAAI,CAACG,aAAa,CAACH,GACrB,EAEAI,EAAQF,iBAuCP,CAvCD,SAA0BF,CAAkB,EAI1C,IAAK,IAHmBK,EAAUC,AAAA,IAAI,CAA9BL,cAAAA,CACuEM,EAAA,IAAI,CAACT,QAAQ,CAApFU,EAAuED,EAAvEC,gBAAAA,CAA2BC,EAA4CF,EAA5CE,uBAAAA,CAC3BC,EAAiBb,EAAjBa,YAAAA,CACCvF,EAAI,EAAGwF,EAAID,EAAatF,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CACnD,IAAM8D,EAAcyB,CAAY,CAACvF,EAAE,CAE7ByF,EAAuBZ,CAAM,CADtBhB,GAAeC,GACa,CACzC,OAAQA,EAAYE,aAAa,EAC/B,IAAK,SACL,IAAK,kBACH,IAAQ0B,EAA8B5B,EAA9B4B,SAAWC,CAAAA,EAAmB7B,EAAnB6B,cAAAA,CACnB,GAAID,EAAW,CACb,IAAwCR,EAAAA,EAAMU,OAAO,CAACF,EAAWG,GAAzDC,EAAgCZ,EAAhCY,SAAWC,CAAAA,EAAqBb,EAArBa,gBAAAA,CACnB,GAAID,EAAW,CACb,IAAQE,EAAaP,EAAbO,QAAAA,CACRA,EAASC,MAAM,CAACC,aAAa,CAACJ,EAAUG,MAAM,EAC9CD,EAASG,QAAQ,CAACC,QAAQ,CAACN,EAAUK,QAAQ,EAC7CH,EAASK,QAAQ,CAACD,QAAQ,CAACN,EAAUQ,WAAW,CAClD,CACAb,EAAMc,aAAa,CAAGR,EAAmBS,EAAgBC,YAAY,CAAGD,EAAgBE,QAAQ,AAClG,CACA,GAAIf,EAAgB,CAClB,IAAwCT,EAAAA,EAAMU,OAAO,CAACD,EAAgBE,GAA9DC,EAAgCZ,EAAhCY,SAAWC,CAAAA,EAAqBb,EAArBa,gBAAAA,CACnB,GAAID,EAAW,CACb,IAAQa,EAAkBlB,EAAlBkB,aAAAA,CACRA,EAAcV,MAAM,CAACC,aAAa,CAACJ,EAAUG,MAAM,EACnDU,EAAcR,QAAQ,CAACC,QAAQ,CAACN,EAAUK,QAAQ,EAClDQ,EAAcN,QAAQ,CAACD,QAAQ,CAACN,EAAUQ,WAAW,EACrDb,EAAMc,aAAa,CAAGR,EAAmBS,EAAgBC,YAAY,CAAGD,EAAgBE,QAAQ,AAClG,CACF,CAMJ,CACF,CACF,EAEAzB,EAAQD,aA0DP,CA1DD,SAAsBH,CAAkB,EACtC,IAAwBK,EAAUC,AAAA,IAAI,CAA9BL,cAAAA,CAMJM,EAAA,IAAI,CAACT,QAAQ,CAJfW,EAIEF,EAJFE,uBACAsB,CAAgBC,EAGdzB,EAHFwB,cAAAA,CACAE,EAEE1B,EAFF0B,gBAAAA,CACAC,EACE3B,EADF2B,iBAAAA,CAEIC,EAAa9B,EAAM+B,aAAa,CAACpB,GACvC,GAAImB,EAAY,CAGd,IAAK,IAFDE,EAAwB,CAAA,EACpBC,EAA4BH,EAA5BG,KAAOpB,CAAAA,EAAqBiB,EAArBjB,gBAAAA,CACN/F,EAAI,EAAGwF,EAAI2B,EAAMlH,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CAC5C,IAAMoH,EAAOD,CAAK,CAACnH,EAAE,CACf+D,EAAOsD,AD7Bd,SAAsBtD,CAAW,EACtC,OAAQA,GACN,IAAK,OACH,OAAOE,EAAqBqD,UAAU,AACxC,KAAK,QACH,OAAOrD,EAAqBsD,WAAW,AACzC,SACE,OAAOtD,EAAqBuD,MAAM,AACtC,CACF,ECoBkCJ,EAAKK,GAAG,EAC5B3B,EAAgBqB,CAAK,CAACnH,EAAE,CAAtB8F,SAAAA,CACJ/B,IAASE,EAAqBuD,MAAM,EACtCN,CAAAA,GAAAA,CAAAA,EAA0B,CAAA,CAAA,CAAA,EAE5B,IAAMQ,EAAsB7C,CAAM,CAACd,EAAK,CAChC4D,EAASD,EAATC,IAAAA,CACRA,EAAK1B,MAAM,CAACC,aAAa,CAACJ,EAAUG,MAAM,EAC1C0B,EAAKxB,QAAQ,CAACC,QAAQ,CAACN,EAAUK,QAAQ,EACzCwB,EAAKtB,QAAQ,CAACD,QAAQ,CAACN,EAAUQ,WAAW,EAC5CoB,EAASE,gBAAgB,CAAC1B,aAAa,CAACkB,EAAKQ,gBAAgB,EAC7DF,EAASnB,aAAa,CAAGR,EAAmBS,EAAgBC,YAAY,CAAGD,EAAgBE,QAAQ,CACnG,IAAMmB,EAAahB,EAAMiB,WAAW,CAACV,GAC/BW,EAAQF,EAAWE,KAAK,CAAGjB,EAC3BkB,EAASH,EAAWG,MAAM,CAAGjB,EAC7BkB,EAAIJ,EAAWI,CAAC,CAAGnB,EACnBoB,EAAI,EAAIL,EAAWK,CAAC,CAAGnB,EAAoBiB,EACjDN,EAASS,QAAQ,CAACC,GAAG,CAACH,EAAGC,EAAGH,EAAOC,EACrC,CAEA,GAAI,CAACd,EAAuB,CAC1B,IAAMmB,EAA8BxD,CAAM,CAACZ,EAAqBqD,UAAU,CAAC,CACrEgB,EAA+BzD,CAAM,CAACZ,EAAqBsD,WAAW,CAAC,CACvEgB,EAA0B1D,CAAM,CAACZ,EAAqBuD,MAAM,CAAC,CACrDgB,EAAmBH,EAAzBV,IAAAA,CACMc,EAAoBH,EAA1BX,IAAAA,CACMe,EAAeH,EAArBZ,IAAAA,CACRe,EAAWrC,QAAQ,CAACD,QAAQ,CAACoC,EAAenC,QAAQ,EACpD,IAAQF,EAAqBuC,EAArBvC,QAAUF,CAAAA,EAAWyC,EAAXzC,MAAAA,CAClB0C,GAAQC,GAAG,CAACJ,EAAerC,QAAQ,CAAEsC,EAAgBtC,QAAQ,CAAEA,GAC/DA,EAAS0C,KAAK,CAAC,IACf5C,EAAOG,QAAQ,CAACoC,EAAevC,MAAM,EACrC,IAAQ6C,EAAa7C,EAAb6C,QAAAA,AACRA,CAAAA,CAAQ,CAAC,GAAG,CAAG3C,EAAS8B,CAAC,CACzBa,CAAQ,CAAC,GAAG,CAAG3C,EAAS+B,CAAC,CACzBY,CAAQ,CAAC,GAAG,CAAG3C,EAAS4C,CAAC,CACzBR,EAAaX,gBAAgB,CAACxB,QAAQ,CAACiC,EAAiBT,gBAAgB,EACxEW,EAAahC,aAAa,CAAGR,EAAmBS,EAAgBC,YAAY,CAAGD,EAAgBE,QAAQ,CACvG6B,EAAaJ,QAAQ,CACnBE,EAAiBF,QAAQ,CAACJ,KAAK,EAAIM,EAAiBF,QAAQ,CAACH,MAAM,CAC/DK,EAAiBF,QAAQ,CACzBG,EAAkBH,QAAQ,AAClC,CACF,CACF,EA9GW1D,CAmHZ,ICpHMuE,gBAAA,WAAMA,SAAAA,EA2ECtE,CAAkB,CAAEmC,CAAmB,CAAEhB,CAAgC,EA7D7EoD,IAAAA,CAAAA,OAAAA,CAA2B,EAAE,CAC7BC,IAAAA,CAAAA,eAAAA,CAAmC,EAAE,MACrCC,kBAA6C,CAAA,CACnDC,YAAaC,EAAiBC,WAAW,CACzCC,OAAQF,EAAiBG,MAAM,CAC/BC,UAAWJ,EAAiBK,SAAS,CACrCC,aAAcN,EAAiBO,YAAY,CAC3CC,QAASR,EAAiBS,OAAO,CACjCC,WAAYV,EAAiBW,UAAU,AACzC,OACQC,iBAA4C,CAAA,CAClDC,KAAMC,EAAgBC,IAAI,CAC1B,kBAAmBD,EAAgBE,cAAc,CACjDC,OAAQH,EAAgBI,MAAM,AAChC,EAgDE,IAAI,CAACC,MAAM,CAAG,IAAI/F,GAAW,IAAI,EACjC,IAAI,CAACY,gBAAgB,CAAGX,EACxB,IAAI,CAACkC,cAAc,CAAGC,EACtB,IAAI,CAACvB,uBAAuB,CAAGO,EAC/B,IAAM4E,EAA0B/F,EAAQgG,qBAAqB,CAAChH,IAAI,CAACgB,GAC7DiG,EAAU,AAAA,CAAA,SAAUC,CAAY,CAAE1F,CAAc,CAAE2F,CAA8B,EACpF,IAAI,CAACL,MAAM,CAAC1F,cAAc,CAAGI,EAC7B2F,EAASD,KACTlH,IAAI,CAAC,IAAI,CACX,CAAA,IAAI,CAACgH,qBAAqB,CAAG,SAACG,CAAAA,EAC5B,OAAOJ,EAAwB,SAACG,CAAc1F,CAAAA,CAAAA,EAC5CyF,EAAQC,EAAM1F,EAAO2F,EACvB,EACF,EACA,IAAI,CAACC,oBAAoB,CAAGpG,EAAQoG,oBAAoB,CAACpH,IAAI,CAACgB,GAC9D,IAAI,CAACqG,eAAe,CAAG,IAAI,CAACA,eAAe,CAACrH,IAAI,CAAC,IAAI,EACrD,IAAI,CAACsH,cAAc,CAAG,IAAI,CAACA,cAAc,CAACtH,IAAI,CAAC,IAAI,EA5F1CsF,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA+FXiC,EAAAA,iBAEC,CAFDA,WACE,OAAO,IAAI,CAACrE,cAAc,CAACsE,cAAc,AAC3C,EAEAC,EAAAA,iBAEC,CAFDA,SAAkB1J,CAAa,EAC7B,IAAI,CAACmF,cAAc,CAACsE,cAAc,CAAGzJ,CACvC,EAEA2J,EAAAA,KAAgB,CAAhBA,aAEAC,EAAAA,IAEC,CAFDA,WACE,IAAI,CAACb,MAAM,CAAC1F,cAAc,CAAG,IAC/B,EAEAwG,EAAAA,GAGC,CAHDA,WAEE,OADA,IAAI,CAACd,MAAM,CAAC1F,cAAc,CAAG,KACtB,IAAI,CAACO,gBAAgB,CAACiG,GAAG,EAClC,EAEAC,EAAAA,sBAEC,CAFDA,SAAuBC,CAAiC,EACtD,IAAI,CAACC,sBAAsB,CAAGD,CAChC,EAEAE,EAAAA,gBASC,CATDA,WACE,IAAyBC,EAA8CxG,AAAA,IAAI,CAAnE4F,eAAAA,CAAiC1F,EAA8BF,AAAA,IAAI,CAAlCE,gBAAAA,CACzCX,EAAQgH,gBAAgB,CAAC,SAAUC,GACnCjH,EAAQgH,gBAAgB,CAAC,cAAeC,GACxCjH,EAAQgH,gBAAgB,CAAC,YAAaC,GACtCjH,EAAQgH,gBAAgB,CAAC,UAAWC,GACpCjH,EAAQgH,gBAAgB,CAAC,eAAgBC,GACzCjH,EAAQgH,gBAAgB,CAAC,aAAcC,GACvCjH,EAAQgH,gBAAgB,CAAC,MAAO,IAAI,CAACV,cAAc,CACrD,EAEAY,EAAAA,mBAUC,CAVDA,WACE,IAAyBD,EAA8CxG,AAAA,IAAI,CAAnE4F,eAAAA,CAAiC1F,EAA8BF,AAAA,IAAI,CAAlCE,gBAAAA,CACzCX,EAAQkH,mBAAmB,CAAC,SAAUD,GACtCjH,EAAQkH,mBAAmB,CAAC,cAAeD,GAC3CjH,EAAQkH,mBAAmB,CAAC,YAAaD,GACzCjH,EAAQkH,mBAAmB,CAAC,UAAWD,GACvCjH,EAAQkH,mBAAmB,CAAC,eAAgBD,GAC5CjH,EAAQkH,mBAAmB,CAAC,aAAcD,GAC1CjH,EAAQkH,mBAAmB,CAAC,MAAO,IAAI,CAACZ,cAAc,EACtD,IAAI,CAAC/B,OAAO,CAAChJ,MAAM,CAAG,CACxB,EAEA4L,EAAAA,WAEC,CAFDA,WACE,IAAI,CAAC5C,OAAO,CAAChJ,MAAM,CAAG,CACxB,EAEAgF,EAAQ+F,cAKP,CALD,WACM,IAAI,CAACS,sBAAsB,GAC7B,IAAI,CAACA,sBAAsB,GAC3B,IAAI,CAACA,sBAAsB,CAAG,KAElC,EAEAxG,EAAQ8F,eAiDP,CAjDD,SAAwBe,CAAoC,EAC1D,IAAQhI,EAAgBgI,EAAhBhI,WAAAA,CACFiI,EAAuB,CAC3BhI,KAAM,IAAI,CAACoF,kBAAkB,CAAC2C,EAAiB/H,IAAI,CAAC,CACpD0B,MAAO5B,GAAeC,GACtBE,cAAe,IAAI,CAACiG,iBAAiB,CAACnG,EAAYE,aAAa,CAAC,AAClE,EACA,GAAI+H,EAAM/H,aAAa,GAAKmG,EAAgBI,MAAM,CAAE,CAClD,IAAyByB,EAAmB7G,AAAA,IAAI,CAAxC+D,eAAAA,CACF+C,EAAWnI,EAAYoI,OAAO,CAA5BD,IAAAA,CAGR,OAFAF,EAAM9D,CAAC,CAAGgE,CAAI,CAAC,EAAE,CACjBF,EAAM7D,CAAC,CAAG+D,CAAI,CAAC,EAAE,CACTF,EAAMhI,IAAI,EAChB,KAAKsF,EAAiBC,WAAW,CAG/B,IAAK,IAFD6C,EAAM,GACNC,EAAW,GACNpM,EAAIgM,EAAe/L,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAAK,CACnD,IAAMqM,EAAUL,CAAc,CAAChM,EAAE,CACjC,GAAIqM,IAAYvI,EAAa,CAC3BqI,EAAMnM,EACN,KACF,CACKqM,GACHD,CAAAA,EAAWpM,CAAAA,CAEf,CACY,KAARmM,IACEC,AAAa,KAAbA,EACFD,EAAMH,EAAe1I,IAAI,CAACQ,GAAe,GAEzCqI,EAAMC,EACNJ,CAAc,CAACI,EAAS,CAAGtI,IAG/BiI,EAAMO,EAAE,CAAGH,EACX,KACF,MAAK9C,EAAiBK,SAAS,CAC7B,IAAK,IAAI1J,EAAIgM,EAAe/L,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAC1CgM,CAAc,CAAChM,EAAE,GAAK8D,IACxBkI,CAAc,CAAChM,EAAE,CAAG,KACpB+L,EAAMO,EAAE,CAAGtM,EAMnB,CACF,CACA,IAAI,CAACiJ,OAAO,CAAC3F,IAAI,CAACyI,EACpB,EAzMW/C,EAAAA,EAAAA,EA8BP9D,IAAAA,QAAJqH,IAAA,WACE,OAAO,IAAI,CAAC/B,MAAM,AACpB,IAEIgC,IAAAA,cAAJD,IAAA,WACE,OAAO,IAAI,CAAC3F,cAAc,CAAC4F,WAAW,AACxC,IAEI1F,IAAAA,mBAAJyF,IAAA,WACE,OAAO,IAAI,CAAC3F,cAAc,CAACE,gBAAgB,AAC7C,IAEIC,IAAAA,oBAAJwF,IAAA,WACE,OAAO,IAAI,CAAC3F,cAAc,CAACG,iBAAiB,AAC9C,IAEI0F,IAAAA,YAAJF,IAAA,WACE,OAAO,IAAI,CAAClH,gBAAgB,CAACoH,SAAS,AACxC,IAEIC,IAAAA,sBAAJH,IAAA,WACE,OAAO,IAAI,CAAClH,gBAAgB,CAACqH,mBAAmB,AAClD,IAEIC,IAAAA,SAAJJ,IAAA,WAIE,IAAK,IAHYI,EAAWxH,AAAA,IAAI,CAAxB8D,OAAAA,CAEiB+C,EAAmBY,AAAA,IAAI,CAAxC1D,eAAAA,CACClJ,EAAI,EAAGA,EAAIgM,EAAe/L,MAAM,CAAED,IAAK,CAC9C,IAAM8D,EAAckI,CAAc,CAAChM,EAAE,CACrC,GAAK8D,GACL,IAAMmI,EAAWnI,EAAYoI,OAAO,CAA5BD,IAAAA,CACFF,EAAQ,CACZhI,KAAMsF,EAAiBG,MAAM,CAC7BxF,cAAemG,EAAgBI,MAAM,CACrC9E,MAAOxB,EAAqBC,UAAU,CACtCoI,GAAItM,EACJiI,EAAGgE,CAAI,CAAC,EAAE,CACV/D,EAAG+D,CAAI,CAAC,EAAE,AACZ,EACAU,EAAOrJ,IAAI,CAACyI,GACd,CACA,OAAOY,CACT,KAzEW3D,CA0MZ,ICzMM6D,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXC,EAAAA,sBAcC,CAdDA,SAAuBlJ,CAAmB,EACxC,OAAO,IAAImJ,QAAQ,SAACC,CAASC,CAAAA,CAAAA,EAC3B,GAAI,CAACC,OAAOC,eAAe,CAAE,CAC3BF,EAAO,AAAIG,MAAM,wDACjB,MACF,CACA,GAAI,CAACC,UAAUC,EAAE,CAAE,CACjBL,EAAO,AAAIG,MAAM,0BACjB,MACF,CACAC,UAAUC,EAAE,CAACC,kBAAkB,CAAC5J,GAAYC,IAAO4J,IAAI,CAAC,SAACC,CAAAA,EACvDA,EAAcT,IAAYC,EAAO,AAAIG,MAAM,8CAC7C,EACF,EACF,EAEAM,EAAAA,kBAWC,CAXDA,SAAmB3J,CAAmB,EACpC,OAAQA,GACN,KAAK4J,EAAcC,OAAO,CAC1B,KAAKD,EAAcE,aAAa,CAC9B,MAAO,AAAmB,aAAnB,OAAOC,OAChB,MAAKH,EAAcI,cAAc,CAC/B,MAAO,AAAoB,aAApB,OAAOC,QAChB,MAAKL,EAAcM,aAAa,CAE9B,MAAO,AAAiC,aAAjC,OAAOC,qBAClB,CACF,EAEAC,EAAAA,qBAGC,CAHDA,SAAsBpK,CAAmB,EAAE,IAAA,IAAAqK,EAAArM,UAAA9B,MAAA,CAAAkD,EAAA,AAAAkL,MAAAD,EAAA,EAAAA,EAAA,EAAA,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAGnL,CAAAA,CAAHmL,EAAA,EAAA,CAAAvM,SAAA,CAAAuM,EAAc,CACvD,IAAMC,EAlCG1B,EAkCsC2B,mBAAmB,CAACzK,EAAK,CACxE,OAAOwK,EAA6BtL,GAAIsL,EAAAA,EAAAA,CAAAA,MAAAA,CAA8BpL,IAAQ,IAChF,EAEAsL,EAAAA,cA4CC,CA5CDA,SAAeC,CAAsB,CAAE9K,CAAmB,CAAE+K,CAAgC,EAC1F,OAAO,IAAI5B,QAAQ,SAACC,CAASC,CAAAA,CAAAA,EAI3B,IAAK,IAHC2B,EAAcjL,GAAYC,GAC1BiL,EAAyB,CAAEC,iBAAkB,CAAC,QAAQ,CAAEC,iBAAkB,EAAE,AAAC,EAC7EC,EAAa,EAAE,CACZhP,EAAI,EAAGwF,EAAImJ,EAAiB1O,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CACvD,IAAMiP,EAAUN,CAAgB,CAAC3O,EAAE,CAACkP,gBAAgB,CAACL,EACrDI,CAAAA,GAAWD,EAAW1L,IAAI,CAAC2L,EAC7B,CACAlC,QAAQoC,GAAG,CAACH,GAAYxB,IAAI,CAAC,WAC3BH,UAAUC,EAAE,CAACmB,cAAc,CAACG,EAAaC,GAASrB,IAAI,CAAC,SAAC9I,CAAAA,EACtD,IAAQ0K,EAAOV,EAAPU,EAAAA,CACFC,EAAaD,EAAGE,oBAAoB,GACrCD,GACHpC,EAAOG,MAAM,gCAEfgC,EAAGG,gBAAgB,GAAG/B,IAAI,CAAC,WACzB,IACI3G,EADE2I,EAAcC,aAAaC,+BAA+B,CAAChL,GAEjE,GAAIA,AAA+BiL,KAAAA,IAA/BjL,EAAQkL,WAAW,CAACC,MAAM,EAAqBnB,EAAIoB,QAAQ,CAa7DjJ,EAAQ,IAAI4I,aAAa/K,EAAS0K,GAClC1K,EAAQqL,iBAAiB,CAAC,CACxBF,OAAQ,CAAChJ,EAAM,AACjB,OAhB+D,CAC/D,IAAMmJ,EAAY,CAChBC,UAAWvL,AAA+BiL,KAAAA,IAA/BjL,EAAQkL,WAAW,CAACC,MAAM,EAAiBR,EAAWY,SAAS,CAC1EC,MAAO,CAAA,EACPC,MAAOd,EAAWc,KAAK,CACvBC,QAASf,EAAWe,OAAO,CAC3BC,uBAAwBb,CAC1B,EACA3I,EAAQ,IAAI4I,aAAa/K,EAAS0K,EAAIY,GACtCtL,EAAQqL,iBAAiB,CAAC,CACxBO,UAAWzJ,CACb,GAOFnC,EAAQ6L,qBAAqB,CAAC,SAAS/C,IAAI,CAAC,SAAC3H,CAAAA,EAC3CmH,EAAQ,IAAIhE,GAAatE,EAASmC,EAAOhB,GACxCoH,EAAAA,EACFA,EAAAA,EACFA,EAAAA,EACFA,EAAAA,EACL,EACF,EAlFWJ,CAmFZ,IAGM,SAAS2D,GAA0BzM,CAAmB,EAC3D,OAAO,SAACwK,CAAAA,EACN1B,GAAY2B,mBAAmB,CAACzK,EAAK,CAAGwK,CAC1C,CACF,CA1Fa1B,GAEJ2B,mBAAAA,CAAoD,EAAE,CCCxD,IAAeiC,GAAf,WAAA,EAAA,SAAAC,CAAA,EAAeD,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAiBpBE,EAAAA,oBAAiD,CAAjDA,SAAqBC,CAAkB,EAAS,EAEhDC,EAAAA,oBAEC,CAFDA,SAAqBD,CAAkB,EACrCA,EAAgBE,KAAK,CAAGC,EAAuBC,SAAS,AAC1D,EArBoBP,EAAAA,EAAAA,EAIhBQ,IAAAA,oCAAJ1E,IAAA,WACE,MAAO,CAAA,CACT,KANoBkE,GCJf,WAGN,GCEMS,GAAA,WAAA,EAAA,SAAAT,CAAA,EAAMS,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OACXC,EAAAA,cASC,CATDA,SAAezM,CAAqB,CAAEQ,CAAiB,CAAEkM,CAA+C,EACtG,GAAI,CAAClM,EAAMJ,cAAc,CAAE,MAAO,CAAA,EAClC,IAAK,IAAI9E,EAAI,EAAGwF,EAAI4L,EAAiBnR,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CACvD,IAAM4Q,EAAkBQ,CAAgB,CAACpR,EAAE,AACvC4Q,CAAAA,EAAgBE,KAAK,GAAKC,EAAuBM,IAAI,EACvD,IAAI,CAACC,UAAU,CAAC5M,EAASQ,EAAO0L,EAEpC,CACA,MAAO,CAAA,CACT,EAEAW,EAAAA,gBAqBC,CArBDA,SAAiB7M,CAAqB,CAAEQ,CAAiB,CAAEkM,CAA+C,EAIxG,IAAK,IAH4BI,EAA2B9M,EAApDY,uBAAAA,CACgBmM,EAAkBvM,EAAlCJ,cAAAA,CACA4M,EAAmBD,EAAnBC,cAAAA,CACC1R,EAAI,EAAGwF,EAAI4L,EAAiBnR,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CACvD,IAAM4Q,EAAkBQ,CAAgB,CAACpR,EAAE,CAC3C,GAAI4Q,EAAgBE,KAAK,GAAKC,EAAuBY,QAAQ,EAC7D,IAAMC,EAAUhB,EAAgBgB,OAAO,CAAC,EAAE,CACtCF,EAAeG,GAAG,CAACjB,EAAgBkB,QAAQ,EAC5B,IAAI,CAACC,oBAAoB,CAACN,EAAeD,EAAwBZ,GAE5EgB,EAAQd,KAAK,GAAKtK,EAAgBE,QAAQ,EAC5CkL,CAAAA,EAAQd,KAAK,CAAGtK,EAAgBC,YAAY,EAG9CmL,EAAQd,KAAK,CAAGtK,EAAgBE,QAAQ,CAG1CkL,EAAQd,KAAK,CAAGtK,EAAgBwL,WAAW,CAE/C,CACF,EAMA/M,EAAS4L,oBAaR,CAbD,SAA8BD,CAA4C,EACxE,OAAQA,EAAgBE,KAAK,EAC3B,KAAKC,EAAuBkB,SAAS,CACnCrB,EAAgBE,KAAK,CAAGC,EAAuBmB,cAAc,CAC7D,KACF,MAAKnB,EAAuBY,QAAQ,CAClCf,EAAgBkB,QAAQ,CAACK,MAAM,GAC/BvB,EAAgBE,KAAK,CAAGC,EAAuBC,SAAS,CACxD,KACF,SACEJ,EAAgBE,KAAK,CAAGC,EAAuBC,SAAS,AAE5D,CACF,EAKA9B,EAAAA,gBAEC,CAFDA,SAAiBL,CAAsB,EACrCA,EAAQE,gBAAgB,CAACzL,IAAI,CAAC,UAChC,EAEA2B,EAAQqM,UAkCP,CAlCD,SAAmB5M,CAAqB,CAAEQ,CAAiB,CAAE0L,CAA4C,EACvG,GAAI,AAAClM,GAAYQ,GAGjB0L,EAAgBE,KAAK,CAAGC,EAAuBkB,SAAS,CACxD,IAAQ9L,EAAuByK,EAAvBzK,QAAUE,CAAAA,EAAauK,EAAbvK,QAAAA,CACMoL,EAAkBvM,EAAlCJ,cAAAA,CACyB0M,EAA2B9M,EAApDY,uBAAAA,CACRmM,EACGW,YAAY,CACX,IAAIC,iBACF,CAAEpK,EAAG9B,EAAS8B,CAAC,CAAEC,EAAG/B,EAAS+B,CAAC,CAAEa,EAAG5C,EAAS4C,CAAC,EAC7C,CAAEd,EAAG5B,EAAS4B,CAAC,CAAEC,EAAG7B,EAAS6B,CAAC,CAAEa,EAAG1C,EAAS0C,CAAC,CAAEuJ,EAAGjM,EAASiM,CAAC,AAE9Dd,GAAAA,GAEDhE,IAAI,CACH,SAACsE,CAAAA,EACKlB,EAAgBE,KAAK,GAAKC,EAAuBmB,cAAc,EACjEJ,EAASK,MAAM,GACfvB,EAAgBE,KAAK,CAAGC,EAAuBC,SAAS,GAExDJ,EAAgBkB,QAAQ,CAAGA,EAC3BlB,EAAgBE,KAAK,CAAGC,EAAuBY,QAAQ,GAG3D,WACMf,EAAgBE,KAAK,GAAKC,EAAuBmB,cAAc,CACjEtB,EAAgBE,KAAK,CAAGC,EAAuBC,SAAS,CAExDJ,EAAgBE,KAAK,CAAGC,EAAuBwB,QAAQ,AAE3D,GAEN,EAEAtN,EAAQ8M,oBASP,CATD,SAA6B7M,CAAc,CAAEsN,CAAc,CAAE5B,CAA4C,EACvG,IAAQkB,EAAalB,EAAbkB,QAAAA,CACFW,EAASvN,EAAMU,OAAO,CAACkM,EAASY,WAAW,CAAEF,GAC3C1M,EAAc2M,EAAd3M,SAAAA,CACF6B,EAAWiJ,EAAgBgB,OAAO,CAAC,EAAE,CAAnCjK,IAAAA,CAIR,OAHAA,EAAK1B,MAAM,CAACC,aAAa,CAACJ,EAAUG,MAAM,EAC1C0B,EAAKtB,QAAQ,CAACD,QAAQ,CAACN,EAAUQ,WAAW,EAC5CqB,EAAKxB,QAAQ,CAACC,QAAQ,CAACN,EAAUK,QAAQ,EAClCsM,EAAO1M,gBAAgB,AAChC,EA1GWmL,EAAAA,EAAAA,EAmCED,IAAAA,oCAAb1E,IAAA,WACE,MAAO,CAAA,CACT,KArCW2E,GAA4BT,UADA1C,GAAAA,EAAAA,cAAAA,OCMlC,IAAA4E,GAAA,WAAA,EAAA,SAAAlC,CAAA,EAAMkC,SAAAA,EAMCC,CAA2B,cACrCzN,AAAAA,CAAAA,EAAAsL,EAAAjO,IAAA,CAAA,IAAA,GAAA,IAAA,AAAA,EALMqQ,oBACAC,CAAAA,EAAAA,EAAAA,QAAAA,CAAmB,EACnBC,EAAAA,QAAAA,CAAqB,EAAE,CAI7B5N,EAAK6N,OAAO,CAAGJ,IARND,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAWXxB,EAAAA,cAUC,CAVDA,SAAezM,CAAqB,CAAEQ,CAAiB,CAAEkM,CAAmC,EAC1F,GAAI,CAAClM,EAAMJ,cAAc,CAAE,MAAO,CAAA,EAClC,OAAQ,IAAI,CAAC+N,oBAAoB,EAC/B,KAAA,EAEE,OADA,IAAI,CAACI,qBAAqB,CAACvO,EAAS0M,GAC7B,CAAA,CACT,MAAA,EACE,MAAO,CAAA,CACX,CACA,MAAO,CAAA,CACT,EAEAG,EAAAA,gBAqCC,CArCDA,SACE7M,CAAqB,CACrBQ,CAAiB,CACjBkM,CAAmC,CACnC8B,CAAsC,EAQtC,IAAK,IAN4B1B,EAA2B9M,EAApDY,uBAAAA,CACgBmM,EAAkBvM,EAAlCJ,cAAAA,CACUqO,EAAYhO,AAAA,IAAI,CAA1B4N,QAAAA,CACF5G,EAAM,EAAE,IAAI,CAAC2G,QAAQ,CAErBM,EAAkB3B,EAAc4B,uBAAuB,GACpDrT,EAAI,EAAGwF,EAAI4N,EAAgBnT,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CACtD,IAAMsT,EAAiBF,CAAe,CAACpT,EAAE,CACjCuT,EAAUD,EAAVC,KAAAA,CACFC,EAAuBpC,CAAgB,CAACmC,EAAM,CACpD,GAAIC,EAAsB,CACxB,IAAI5B,EAAU4B,EAAqB5B,OAAO,CAAC,EAAE,CACxCA,GAEHA,CAAAA,AADAA,CAAAA,EAAU4B,EAAqB5B,OAAO,CAAC,EAAE,CAAGsB,GAAAA,EACpCO,cAAc,CAAGD,EAAqBE,KAAK,EAEjDJ,AAAiC,YAAjCA,EAAe/M,aAAa,EAC9B,IAAI,CAACoN,mBAAmB,CAAClC,EAAeD,EAAwBI,EAAS0B,GACzE1B,EAAQd,KAAK,CAAGtK,EAAgBE,QAAQ,EAExCkL,EAAQd,KAAK,CAAGtK,EAAgBC,YAAY,CAE9C0M,CAAO,CAACI,EAAM,CAAGpH,OAEjByH,QAAQC,IAAI,CAAC,uBAAyBN,EAE1C,CAEA,IAAK,IAAIvT,EAAI,EAAGwF,EAAI4L,EAAiBnR,MAAM,CAAED,EAAIwF,EAAGxF,IAC9CmT,CAAO,CAACnT,EAAE,CAAGmM,GAAKiF,CAAAA,CAAgB,CAACpR,EAAE,CAAC4R,OAAO,CAAC,EAAE,CAACd,KAAK,CAAGtK,EAAgBwL,WAAW,AAAXA,CAEjF,EAEA/M,EAAS0L,oBAER,CAFD,SAA8BC,CAAgC,EAC5DA,EAAgBE,KAAK,CAAGC,EAAuBkB,SAAS,AAC1D,EAKA/C,EAAAA,gBA8BC,CA9BDA,SAAiBL,CAAsB,EACrCA,EAAQE,gBAAgB,CAACzL,IAAI,CAAC,kBAC9B,IAAiBsP,EAAWzN,AAAA,IAAI,CAAxB6N,OAAAA,CACFhE,EAAqC,EAAE,CAC7C,IAAI4D,EAwBF,OAAO7F,QAAQE,MAAM,CAAC,AAAIG,MAAM,uBAvBhC,IAAK,IAAIpN,EAAI,EAAGwF,EAAIoN,EAAO3S,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CAC7C,IAAMyT,EAAiBb,CAAM,CAAC5S,EAAE,CAC1B8T,EAAkBlB,CAAM,CAAC5S,EAAE,CAAzB8T,WAAAA,CACR,GAAI,CAACA,EACH,OAAO/G,QAAQE,MAAM,CAAC,AAAIG,MAAM,kBAAoBqG,EAAeM,IAAI,CAAG,kBAE1E/E,EAAW1L,IAAI,CAAC0Q,kBAAkBF,GAEtC,CACA,OAAO,IAAI/G,QAAQ,SAACC,CAASC,CAAAA,CAAAA,EAE3B,IAAMgH,EAAiBpF,EAAQoF,aAAa,CAAG,EAAE,CACjDlH,QAAQoC,GAAG,CAACH,GAAYxB,IAAI,CAAC,SAAC0G,CAAAA,EAC5B,IAAK,IAAIlU,EAAI,EAAGwF,EAAI0O,EAAQjU,MAAM,CAAED,EAAIwF,EAAGxF,IACzCiU,EAAc3Q,IAAI,CAAC,CACjBoQ,MAAOQ,CAAO,CAAClU,EAAE,CACjBmU,cAAevB,CAAM,CAAC5S,EAAE,CAACoU,aAAa,AACxC,GAEFpH,GACCC,EAAAA,EACL,EAIJ,EAEAhI,EAAQgO,qBAoBP,CApBD,SAA8BvO,CAAqB,CAAE0M,CAAmC,YACtF,CAAA,IAAI,CAACyB,oBAAoB,CAAA,EACzBnO,EAAQW,gBAAgB,CAErBgP,qBAAqB,GACrB7G,IAAI,CAAC,SAAC8G,CAAAA,EACL,GAAIA,EACF,IAAK,IAAItU,EAAI,EAAGwF,EAAI8O,EAAerU,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CACrD,IAAMuU,EAAgBD,CAAc,CAACtU,EAAE,CACjC4Q,EAAkBQ,CAAgB,CAACpR,EAAE,AACvCuU,AAAkB,CAAA,cAAlBA,GACFpP,EAAK0N,oBAAoB,CAAA,EACzBjC,EAAgBE,KAAK,CAAGC,EAAuBY,QAAQ,GAEvDf,EAAgBE,KAAK,CAAGC,EAAuBwB,QAAQ,CACvDqB,QAAQC,IAAI,CAACjD,EAAgB8C,KAAK,CAACK,IAAI,CAAE,gBAE7C,CAEJ,EACJ,EAEA9O,EAAQ0O,mBAOP,CAPD,SAA4BzO,CAAc,CAAEsN,CAAc,CAAEgC,CAA6B,CAAElB,CAAmB,EAC5G,IAAQ3L,EAAS6M,EAAT7M,IAAAA,CACA7B,EAAcZ,EAAMU,OAAO,CAAC0N,EAAemB,UAAU,CAAEjC,GAAvD1M,SAAAA,CACR6B,EAAK1B,MAAM,CAACC,aAAa,CAACJ,EAAUG,MAAM,EAC1C0B,EAAKtB,QAAQ,CAACD,QAAQ,CAACN,EAAUQ,WAAW,EAC5CqB,EAAKxB,QAAQ,CAACC,QAAQ,CAACN,EAAUK,QAAQ,EACzCqO,EAAaE,qBAAqB,CAAGpB,EAAeqB,qBAAqB,AAC3E,EAlIWhC,GAA2BlC,UADCxC,GAAAA,EAAAA,aAAAA,OCFlC,IAAA2G,GAAA,WAAA,EAAA,SAAAnE,CAAA,EAAMmE,SAAAA,EAGCC,CAAoB,eAC9B1P,EAAAsL,EAAAjO,IAAA,CAAA,IAAA,GAAA,IAAA,CACIqS,IAAiBC,EAAYC,UAAU,EACzCnB,QAAQC,IAAI,CAAC,+CANNe,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAUXzD,EAAAA,cAEC,CAFDA,SAAezM,CAAqB,CAAEQ,CAAiB,CAAEkM,CAAmC,EAC1F,MAAO,CAAC,CAAClM,EAAMJ,cAAc,AAC/B,EAEAyM,EAAAA,gBAgCC,CAhCDA,SACE7M,CAAqB,CACrBQ,CAAiB,CACjBkM,CAAmC,CACnC8B,CAAyC,EAOzC,IAAK,IAF8DzB,SAHlCD,EAA2B9M,EAApDY,uBAAAA,CACgBmM,EAAkBvM,EAAlCJ,cAAAA,CAEFkQ,EAA6BvD,EAAcuD,cAAc,EAAA,CAAA,AAAIvD,MAAAA,CAAAA,EAAAA,EAAcwD,gBAAgB,AAAA,EAA9BxD,KAAAA,EAAAA,EAAgCuD,cAAc,AAAA,EAC3GpD,EAAgCR,CAAgB,CAAC,EAAE,CAACQ,OAAO,CACxD5R,EAAI,EAAGwF,EAAIoM,EAAQ3R,MAAM,CAAED,EAAIwF,EAAGxF,IAAK,CAC9C,IAAMkV,EAAetD,CAAO,CAAC5R,EAAE,CAC3BgV,EAAenD,GAAG,CAACqD,EAAaC,OAAO,GACzCD,EAAapE,KAAK,CAAGtK,EAAgBE,QAAQ,CAC7C,IAAI,CAAC0O,YAAY,CAAC3D,EAAeD,EAAwB0D,IAEzDA,EAAapE,KAAK,CAAGtK,EAAgBwL,WAAW,AAEpD,KAE6BqD,EAAuBzI,AAAA,IAAI,CAAhD0I,mBAAAA,CACRN,EAAeO,OAAO,CAAC,SAACJ,CAAAA,EACtB,GAAI,CAACE,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAoBxD,GAAG,CAACsD,EAAU,EAAA,CACrC,IAAMK,EAAQtC,GACdsC,CAAAA,EAAML,OAAO,CAAGA,EAChBK,EAAMC,eAAe,CAAG,GACxBtQ,EAAKiQ,YAAY,CAAC3D,EAAeD,EAAwBgE,GACzD5D,EAAQtO,IAAI,CAACkS,EACf,CACF,GACA,IAAI,CAACF,mBAAmB,CAAGN,CAC7B,EAEA/P,EAAS0L,oBAER,CAFD,SAA8BC,CAAgC,EAC5DA,EAAgBE,KAAK,CAAGC,EAAuBY,QAAQ,AACzD,EAKAzC,EAAAA,gBAEC,CAFDA,SAAiBL,CAAsB,EACrCA,EAAQE,gBAAgB,CAACzL,IAAI,CAAC,kBAChC,EAEA2B,EAAQmQ,YAqBP,CArBD,SAAqBlQ,CAAc,CAAEsN,CAAc,CAAE0C,CAAgC,EACnF,IAAQvN,EAA2BuN,EAA3BvN,IAAAA,CAAM+N,EAAqBR,EAArBQ,OAAAA,CAASP,EAAYD,EAAZC,OAAAA,CACjBQ,EAAYzQ,EAAMU,OAAO,CAACuP,EAAQS,UAAU,CAAEpD,GACpD,GAAKmD,GACL,IAAQ7P,EAAgC6P,EAAhC7P,SAAWC,CAAAA,EAAqB4P,EAArB5P,gBAAAA,CAGnB,GAFAmP,EAAapE,KAAK,CAAG/K,EAAmBS,EAAgBC,YAAY,CAAGD,EAAgBE,QAAQ,CAC/FwO,EAAaW,SAAS,CAAGV,AAAwB,eAAxBA,EAAQ7O,WAAW,CAAoBwO,EAAYgB,UAAU,CAAGhB,EAAYiB,QAAQ,CACzGb,EAAaO,eAAe,CAAGN,EAAQM,eAAe,CAAE,CAC1DP,EAAaO,eAAe,CAAGN,EAAQM,eAAe,CACtDP,EAAac,eAAe,CAAG,CAAA,EAE/B,IAAK,IACMhW,EAFMiW,EAAed,EAAxBO,OAAAA,CACC1V,EAAI,EAAGwF,EAAKkQ,EAAQzV,MAAM,CAAGgW,EAAWhW,MAAM,CAAGD,EAAIwF,EAAGxF,IAC9D0V,AAAAA,CAAAA,AAAAA,CAAAA,CAAQ1V,EAAAA,EAAE,EAAV0V,CAAAA,AAAAA,CAAO,CAAC1V,EAAE,CAAK,IAAI2I,EAAQ,CAAA,EAAGvC,QAAQ,CAAC6P,CAAU,CAACjW,EAAE,OAGvDkV,EAAac,eAAe,CAAG,CAAA,EAEjCrO,EAAKtB,QAAQ,CAACD,QAAQ,CAACN,EAAUQ,WAAW,EAC5CqB,EAAKxB,QAAQ,CAACC,QAAQ,CAACN,EAAUK,QAAQ,EACzCwB,EAAK1B,MAAM,CAACC,aAAa,CAACJ,EAAUG,MAAM,EAC1C0B,EAAKuO,aAAa,CAAChQ,aAAa,CAACJ,EAAUqQ,OAAO,CAAClQ,MAAM,EAC3D,EAhFW2O,GAA2BnE,UADC5C,GAAAA,EAAAA,aAAAA"}